每个权利和每个人之间的差异

问题描述 投票:3回答:1

在KDB中,为什么我可以这样做:

{[x;y]x+y} ./: enlist[(1;1);(2;1)]

但不是这个:

{[x]x+1} ./: enlist[1;2]

如果我使用这个:

{[x]x+1} each enlist[1;2]

然后它工作。为什么采取2个参数会产生影响?

kdb
1个回答
6
投票

我认为这里需要解释一些事情,但不是每个人和每个人之间的区别。

你的第一个和第二个例子并不完全可比。使用多个参数,enlist返回单个列表,因此enlist[(1;1);(2;1)]返回一个通用列表,而enlist[1;2]返回一个类型列表(longs列表)。更多关于enlist here

现在,动词点的一个应用是多变量应用程序,读取here。这意味着它将多个参数应用于函数,因此,.需要一个列表。每个右侧依次取右侧的每个项目并将其传递给左侧的功能。由于.期待一个列表,但是第二行中的每个项都是一个原子序列长,它会抛出一个类型错误。

更新第二行,以便.收到第一行中的列表...

q){[x]x+1} ./: enlist[(1;2)] 'rank

这次我们看到排名错误,因为.试图将2个参数应用于monadic函数。相若方式;

q){[x]x+1}[1;2] 'rank

要解决这个问题,我们可以进一步加入。因此,每个权利将2个项目列表传递给.而不是1,2个项目列表。

q){[x]x+1} ./: enlist each (1;2) 2 3

© www.soinside.com 2019 - 2024. All rights reserved.