假设有一个现有的函数定义.my.func:{[tbl;data] ...},我想将该upd函数设置为此 lambda。
@[`.;`upd;:;.my.func]; / #1
`upd set .my.func; / #2
Run Code Online (Sandbox Code Playgroud)
之所以这么问,是因为我在我使用的代码库中看到了很多 #1,但 #2 似乎更简洁,所以想知道它们是否有某种不同。
我检查了https://code.kx.com/q/ref/amend/
“修改于”@[d; i; v; vy]
upd这似乎只是在全局命名空间中定义函数。
`.`upd:.my.func我自己运行#1/#2 后,get`.似乎也表明#1/2 是等效的。
\d这些行在用于更改命名空间的场景中并不等效。在上面的示例中,set在当前命名空间中创建变量,而这恰好是全局命名空间。@在全局命名空间中创建变量。
set使用.test命名空间创建的示例.test.upd。
d).my.func:{x}
q)\d .test
q.test)`upd set .my.func;
q.test)upd
{x}
q.test)\d .
q)upd / upd does not exist in global namespace
'upd
[0] upd
^
q).test.upd / upd exists in .test namespace
{x}
Run Code Online (Sandbox Code Playgroud)
@用于upd2突出显示与上述示例的差异的示例upd。upd2在全局命名空间中创建。
q)\d .test
q.test)@[`.;`upd2;:;.my.func];
q.test)upd2 / upd2 does not exist in .test namespace
'upd2
[0] upd2
^
q.test)\d .
q)upd2 / upd2 exists in global namespace
{x}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
167 次 |
| 最近记录: |