Kdb k中的变范围传播
在以前版本的Kdb k中的变范围传播,kdb,k,Kdb,K,在以前版本的k中,我看到了变量作用域向内部函数的传播。请参见中的eval:{[t;c]{x*t+y}/c} 但是如果我在现代k中尝试同样的操作,我会得到一个错误: KDB+ 3.6 2018.05.17 Copyright (C) 1993-2018 Kx Systems q)\ {[k]{x*x}k}3 9 {[k]{x*x+k}k}3 'k [2] k){x*x+k} ^ ) 那么为什么会发生这种错误呢?在现代q中,这种可变范围传播是否被“禁止
k
中,我看到了变量作用域向内部函数的传播。请参见中的eval:{[t;c]{x*t+y}/c}
但是如果我在现代k
中尝试同样的操作,我会得到一个错误:
KDB+ 3.6 2018.05.17 Copyright (C) 1993-2018 Kx Systems
q)\
{[k]{x*x}k}3
9
{[k]{x*x+k}k}3
'k
[2] k){x*x+k}
^
)
那么为什么会发生这种错误呢?在现代
q
中,这种可变范围传播是否被“禁止”?事实上,k4,kx最近的k实现不支持。事实上,你提到的那篇文章在“语言的变化”一节中提到:
K4/q在许多重要方面都比K3有所改变,例如:
- K4和q中的嵌套函数不能引用周围函数的局部 变量。(通常,这种能力的缺乏可以通过 利用函数投影。)
f:{b:3; g:{b}; b:4; g[]}
f的值是局部函数g的值,结果是3,定义g时b的值,
不是后面的值4
f[]
3
(顺便说一句,我强烈建议阅读整个文件)
我不知道为什么会放弃对闭包的支持,但我认为这是因为性能原因,特别是在进程间通信期间。ljgw,感谢您删除
q
标记。我读过这篇文章,-仅供js使用:)