在kdb+'if'条件下,有时间值的等于(=)和不等于(<>)。

问题描述 投票:0回答:1

给定下列变量:

x: (5 xbar `minute$.z.T);
y: (1 xbar `minute$.z.T);

这个 if 条件被正确评估。if[x=y;...];

然而,令我困惑的是,这将是 正确评估,并抛出一个 nyi: if[x<>y;...]

运行时 x=yx<>y 单独 if 条件下),它们评价为 0b1b.

为什么 <> 导致 nyi 当用 if 条件?

kdb
1个回答
4
投票

我不确定你的代码有什么问题。我刚刚启动了一个新的q会话,并用一个简单的if表达式填入了你描述的所有内容。

x: (5 xbar `minute$.z.T);
y: (1 xbar `minute$.z.T);
if[x<>y; show 123]

x是17: 05,y是17: 07,所以上述表达式评估为真,并在控制台打印123。也许问题实际上是你想要评估的表达式中的一些错误,而不是条件本身?


2
投票

正如另一个答案所建议的那样,x<>y并不是导致nyi错误的原因,你需要检查的是你的if语句内的逻辑。如果它在if语句外工作,就会在if语句内工作。

你认为x=y在if语句内工作,但x<>y不工作,原因是你的x和y不相等,所以if语句只在x<>y的情况下执行。当你测试x=y时,进一步的语句将不会在if语句内运行,因此你不会看到nyi错误。

如果你分享代码的其余部分,我们可以帮助你解决这个问题,一个nyi错误的例子是使用冒号来实现返回功能,当不在一个函数内部时,例如。

if[x=y;:5] /no error thrown as :5 is not executed
if[x<>y;:5] / throws nyi as x<>y, and :5 is not implemented outside of lambdas 
© www.soinside.com 2019 - 2024. All rights reserved.