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

时间:2020-06-15 15:48:37

标签: kdb

给出以下变量:

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

if条件已正确评估: if[x=y;...];

但是,令我困惑的是,这将不能正确评估,并抛出nyiif[x<>y;...]

单独运行x=yx<>y(在if条件之外)时,它们的计算结果为0b1b

为什么在<>条件下使用nyi会导致if

2 个答案:

答案 0 :(得分: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,因此上述表达式评估为true,并将123打印到控制台。也许问题实际上是您要评估的表达式中的某些错误,而不是条件本身?

答案 1 :(得分:2)

正如另一个答案所暗示的那样,x <> y并不是nyi错误的原因,这是您需要检查的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