我可以看到两种从q中的函数定义全局变量的方法。
使用“ ::”
q){gv :: 10} []
q)gv /-10
使用设置
q){`gv set 20} []
q)gv /-20
有一个设置的陷阱,即如果全局变量已经分配了一个符号,则在函数内分配给全局变量的值将分配给分配给全局变量的符号。
q)gv:`t
q){gv set 20}[]
`t
q)gv
`t
q)t
20
有人可以向我解释在函数中定义全局变量的更好方法(设置或“ ::”),为什么更好?
答案 0 :(得分:3)
实际上并没有“更好”的东西-但是set
的优点是可以分配一个变量名,变量名本身就是一个变量(如您的示例所示)。
在上一个示例中,我对您的困惑感到困惑……如果您希望将20分配给一个名为gv的全局变量,那么您应该在gv前面加一个反引号,也就是`gv set 20;
相反,如果您希望将20分配给gv包含的符号/名称,则不要使用反引号,也就是gv set 20;
最后要注意的是,您还可以使用单个冒号分配在非根目录/命名空间中创建全局变量
q){.this.that:1;}[]
q)
q).this
| ::
that| 1