Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kdb k中的变范围传播_Kdb_K - Fatal编程技术网

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中的嵌套函数不能引用周围函数的局部 变量。(通常,这种能力的缺乏可以通过 利用函数投影。)
事实证明,缺乏词汇范围界定的支持并非总是如此。尽管现在唯一官方记录的语言是q,但人们仍然可以找到k2的参考手册,k2是k大约在1998年的一个实现,例如:。第158页“本地功能”一节内容如下:

局部函数

假设函数g是在另一个函数体中定义的 函数f并在其定义中使用变量x,其中x是局部变量 到f。那么x是g中的常数,不是变量,它的值是 定义g时的当前值。例如,如果:

  f:{b:3; g:{b}; b:4; g[]}
f的值是局部函数g的值,结果是3,定义g时b的值, 不是后面的值4

  f[]
3
(顺便说一句,我强烈建议阅读整个文件)


我不知道为什么会放弃对闭包的支持,但我认为这是因为性能原因,特别是在进程间通信期间。

ljgw,感谢您删除
q
标记。我读过这篇文章,-仅供js使用:)