在q kdb中的函数内定义全局变量

时间:2019-09-26 06:31:23

标签: kdb

我可以看到两种从q中的函数定义全局变量的方法。

  1. 使用“ ::”

    q){gv :: 10} []
    q)gv /-10

  2. 使用设置

    q){`gv set 20} []
    q)gv /-20

有一个设置的陷阱,即如果全局变量已经分配了一个符号,则在函数内分配给全局变量的值将分配给分配给全局变量的符号。

q)gv:`t
q){gv set 20}[]
`t
q)gv
`t
q)t
20

有人可以向我解释在函数中定义全局变量的更好方法(设置或“ ::”),为什么更好?

1 个答案:

答案 0 :(得分:3)

实际上并没有“更好”的东西-但是set的优点是可以分配一个变量名,变量名本身就是一个变量(如您的示例所示)。

在上一个示例中,我对您的困惑感到困惑……如果您希望将20分配给一个名为gv的全局变量,那么您应该在gv前面加一个反引号,也就是`gv set 20;相反,如果您希望将20分配给gv包含的符号/名称,则不要使用反引号,也就是gv set 20;

最后要注意的是,您还可以使用单个冒号分配在非根目录/命名空间中创建全局变量

q){.this.that:1;}[]
q)
q).this
    | ::
that| 1