我需要理解这段代码。
raze(handle1, handle2, handle3)@\:({.myqueries.select_from_all[`some_table] . (a;b;c;();();0b);p1,p2;`})
基本上,我们的想法是从同一个表中的三个数据库中选择数据。
@\:
在这种情况下做了什么?为什么我们{}
内有()
?
.
之后select_from_all[`some_table]
的含义是什么?
答案 0 :(得分:4)
查看您提供的代码,看起来可能会遗漏一些内容 - 我会告诉您代码所处的预期形式:
raze(listOfHandles)@\:({[x;y] funcUsingXandY};arg0;arg1)
where:
listOfHandles - a list of handles to remote processes
@\: - apply the right hand side to each item in the left hand side list
({[x;y] funcUsingXandY};arg0;arg1) - this sends a function definition (lambda) + args for the function, to be executed on each of the handles.
示例(假设有进程侦听localhost,端口7070和7071):
q) handle1:hopen 7070;
q) handle2:hopen 7071;
q) raze(handle1,handle2)@\:({[x;y] enlist(.z.p; x+y)}; 39;3)
2014.08.23D14:11:15.452611000 42
2014.08.23D14:11:15.452847000 42
在上面的示例中,我们在每个远程句柄{[x;y] enlist(.z.p; x+y)}
和(39;3)
上使用args handle1
执行函数handle2
- 我们得到当前时间的响应(.z.p
)&我们对每个句柄的响应中两个args的总和。 raze
将从每个句柄返回的结果连接到一个列表中(在您的示例中,看起来该函数返回一个表 - 在这种情况下,raze
将加入表的列表返回处理,在一个表中)
修改:我错过了关于.
的问题的部分 - 。允许您将参数列表应用于采用多个参数的函数 - 例如:
q)plus:{[x;y] x+y}
q)plus . (4;5)
9
有关详细信息,请参阅: