我一直认为 inq
和 ink
所有表达式中的划分;
是从左到右计算的,而里面的运算符优先级是从右到左的。
但后来我尝试将此原理应用于 Ament At 运算符参数。令人困惑的是,它似乎朝着相反的方向工作:
$ q KDB+ 3.6 2019.04.02 Copyright (C) 1993-2019 Kx Systems
q)@[10 20 30;g;:;100+g:1]
10 101 30
同样的优先级也适用于函数参数:
q){x+y}[q;10+q:100]
210
那么为什么会发生 - 为什么它首先计算最后一个参数,然后才第一个?这是我们应该避免的功能吗?
更新:评估与解析。可能还有其他情况:https ://code.kx.com/q/ref/apply/#when-e-is-not-a-function
q)@[2+;"42";{)}]
')
[0] @[2+;"42";{)}]
q)@[string;42;a:100] / expression not a function
"42"
q)a // but a was assigned anyway
100
q)@[string;42;{b::99}] / expression is a function
"42"
q)b // not evaluated
'b
[0] b
^