【问题标题】:.Q.trp and bt handling.Q.trp 和 bt 处理
【发布时间】:2020-12-15 10:12:55
【问题描述】:

我看到(在.Q.fpn 中)以下技术来解析并显示传递给.Q.trp 函数的bt 对象:

q)f:{x+1}
q).Q.trp[f;`a;{'(x;y)}]
'type
  [4]  f:{x+1}
           ^
  [3]  (.Q.trp)

  [2]  .Q.trp[f;`a;{'(x;y)}]
       ^
  [0]  .Q.trp[f;`a;{'(x;y)}]
       ^

'(x;y) 似乎是一种异常构建结构,但 Kx 文档说只有两种异常构建方式:从符号和从字符串。看起来我们可以从(symbol; bt object) 列表中构建一个异常。

那么'(x;y) 代表什么结构?

我们可以用'(x;y) 构建不同于异常的东西吗?

【问题讨论】:

    标签: kdb k


    【解决方案1】:

    我的猜测是,这是最近允许的特定信号以及 .Q.trp/.Q.bt 功能的添加。看起来它只适用于(symbol;bt object)(string;bt object),其他任何东西都无法识别。

    q).Q.trp[{1+x};`a;{'(x;y;1)}]
    'stype
    

    如果没有信号返回,输出可以存储:

    q)r:.Q.trp[{1+x};`a;{(x;y)}]
    

    而且这种类型的信号似乎在任何情况下都有效,而不仅仅是在 .Q.trp 中:

    q)'("other";last r)
    'other
      [2]  {1+x}
             ^
      [1]  (.Q.trp)
    
      [0]  r:.Q.trp[{1+x};`a;{(x;y)}]
    

    我怀疑last r 有一种非常特殊的格式/形状,人们可以制造它,但它似乎是一个不必要的用例。

    额外奖励:

    这行得通:

    q)'("other";())
    'other
      [0]  '("other";())
            ^
    

    但我尝试过的其他事情出现了奇怪的错误:

    q)'("other";(();()))
    pl0
    pl0
    q)
    q)'("other";"abc")
    srr
    

    【讨论】:

    • srr 错误很奇怪。几个月前有一个关于该错误的问题,我认为这是ssr 的错字或未定义的变量
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2011-11-22
    • 2015-04-12
    • 1970-01-01
    • 2015-05-20
    • 2023-03-31
    相关资源
    最近更新 更多