KDB/Q中@[`.;`upd;:;.my.func]与`upd set .my.func是否等价?
KDB+中两种函数赋值写法的等价性确认
问题背景
现有函数定义:
.my.func:{[tbl;data] ...}
需要将upd函数设置为上述lambda,现询问以下两行代码是否等价:
- 写法1:
@[.;upd;:;.my.func]; - 写法2:``upd set .my.func;`
工作代码库中大量使用写法1,但写法2更简洁,我查阅@函数文档并做了测试后,初步认为二者等价,仍需进一步确认。
结论与解释
二者完全等价,具体说明如下:
- 写法1里的
@(原子替换函数)在这里的逻辑是:在默认命名空间.下,对符号upd执行赋值操作:;,赋值内容为.my.func。 - 写法2的``upd set .my.func
是KDB+中更直观的赋值语法,本质也是在默认命名空间下将upd绑定到.my.func`这个函数上。
两种写法最终的效果完全一致:upd会成为.my.func的别名,调用upd[tbl;data]和调用.my.func[tbl;data]的行为没有任何差异。
内容的提问来源于stack exchange,提问作者kgf3JfUtW
相关产品推荐
相关产品推荐

