Kdb+中变量的正确引用形式:何时使用带反引号的变量名?
Q语言变量引用:何时加反引号?
先看你给出的示例代码:
q)p:`AAPL`AAPL`GE`IBM`GE`IBM`GE`GOOG`GE`IBM`AAPL q)x:`u#distinct p / 生成带唯一属性的枚举基 q)e:`x$p / 将p转换为基于x的枚举类型
这里的核心区别在于你要引用的是变量的“名称”还是“值”:
1. 加反引号:引用变量的“名称”而非值
当你需要告诉Q“我要使用名为某个字符串的变量”时,要把变量名转成symbol类型(加反引号)。
- 比如枚举转换操作
$的第一个参数,要求传入枚举基的变量名(符号形式),这样Q才能找到你定义的x这个变量,用它的内容作为枚举的基准集合。 - 其他类似场景:用
getvar`通过变量名取值、元编程中动态调用变量/函数时,都需要用反引号把变量名转成符号。
2. 不加反引号:直接使用变量的“值”
绝大多数常规操作里,你要的是变量存储的内容,直接写变量名即可:
- 示例里的
p作为$的第二个参数,是直接传递它的元素值,用来和枚举基x匹配生成枚举; - 赋值、算术运算、函数传参、数据查询等场景,都是直接用变量名取其值。
补充验证例子
如果尝试去掉x的反引号写成x$p,Q会把x的当前值(AAPLGEIBMGOOG)当成符号集合来处理,而非去读取变量x`,这会不符合你的预期甚至报错。
内容的提问来源于stack exchange,提问作者Xavier Z
相关产品推荐
相关产品推荐

