【发布时间】:2015-07-07 16:21:53
【问题描述】:
从执行控制一章,我觉得函数参数有奇怪的实现,如下面的代码:
zs:{`d`P`L`G`D!(system"d"),v[1 2 3],enlist last v:value x}
【问题讨论】:
标签: kdb
从执行控制一章,我觉得函数参数有奇怪的实现,如下面的代码:
zs:{`d`P`L`G`D!(system"d"),v[1 2 3],enlist last v:value x}
【问题讨论】:
标签: kdb
它们不是函数参数。函数参数要么总是用方括号括起来,如下所示:
{[a;b] .... }
如果没有指定,它们将被暗示为 x,y,z
{x+y}
调试函数所做的是在提供的函数 x 上运行“值”,这会产生有用的信息,如http://code.kx.com/q/ref/metadata/#value 中所述
Given a function, it returns the list
(bytecode;parameters;locals(context;globals);constants[0];...;constants[n];definition)
然后它从中提取第二个、第三个、第四个和最后一个输出,在当前命名空间/目录(系统“d”)之前添加,最后使用 d/P/L/G/D 作为键创建输出字典
【讨论】:
key .q 时将函数名称列表作为符号获得的原因相同,或者在运行 parse"1+a" 时将变量 a 视为符号的原因相同(parse 创建了一个解析树,表示 q 如何解释和执行您的代码)。 Q 知道将反引号解析为引用您称为 a 的基础变量。详情看这里code.kx.com/wiki/Reference/parse_tree