【问题标题】:What to do the weird function parameters of kdb work?kdb奇怪的函数参数怎么办?
【发布时间】:2015-07-07 16:21:53
【问题描述】:

从执行控制一章,我觉得函数参数有奇怪的实现,如下面的代码:

zs:{`d`P`L`G`D!(system"d"),v[1 2 3],enlist last v:value x}

【问题讨论】:

    标签: kdb


    【解决方案1】:

    它们不是函数参数。函数参数要么总是用方括号括起来,如下所示:

    {[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 作为键创建输出字典

    【讨论】:

    • 谢谢。这有很大帮助。如果您查看链接并看到全局变量已显示为 `d.问题是为什么只是 d 的变量名前面有一个反引号。变量 d 在函数体中之前没有反引号。一个普遍的问题是为什么在枚举或引用外键时需要反引号。我想这是一个语言法律问题,但希望能提供一些意见。
    • 这是一个代表变量名的符号,常用于动态处理变量/函数。与您在键入 key .q 时将函数名称列表作为符号获得的原因相同,或者在运行 parse"1+a" 时将变量 a 视为符号的原因相同(parse 创建了一个解析树,表示 q 如何解释和执行您的代码)。 Q 知道将反引号解析为引用您称为 a 的基础变量。详情看这里code.kx.com/wiki/Reference/parse_tree
    猜你喜欢
    • 2017-01-12
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    相关资源
    最近更新 更多