关于xkey实现

  • 本文关键字:实现 xkey 关于 kdb k
  • 更新时间 :
  • 英文 :


功能应用方法.[0!y;();xcols x]xkey:之间有什么区别

xkey
k){(#x)!.[0!y;();xcols x]}

以及一个简单的函数调用:CCD_ 3。

为什么它是xkey中首选的函数应用?

关于从k)上下文内部调用xcols的第二个问题——它是如何工作的?出于某种原因,我不能做同样的事情:

t:([]a:`a`s`d;b:1 2 3;c:4 5 6)
k).[0!t;();xcols `a`b]
ERROR: 'xcols 
(attempt to use variable xcols without defining/assigning first (or user-defined signal))

我认为当通过名称传递表时,函数apply可能是for

t:([]a:`a`s`d;b:1 2 3;c:4 5 6)
.[0!t;();xcols[`a`b]]  /this works
`a`b xcols 0!t         /equivalent non functional form works
q)`a`b xcols 0!`t      /this fails when passing `t
'type
[0]  `a`b xcols 0!`t

q).[0!`t;();xcols[`a`b]]  /though functional form still works with `t

q)`a`b xkey `t            /hence you can use xkey in place
`t

编辑:为了完整起见,在答案中包括我的评论,当在k中时,你应该在q命令前面加上.q来访问它们,因为这是它们在中的名称

q)xcols[`a`b]
k){(x,f@&~(f:cols y)in x)#y}[`a`b]
q)
.q.xcols`a`b
k){(x,f@&~(f:cols y)in x)#y}[`a`b]

编辑2:为了解决您的评论,您的示例的xcols可以归结为

`a`b`c#t

`a`b`c#`t 

不起作用。我没有太多的解释为什么它不起作用,除了它是如何设计的。函数形式告诉q通过应用take函数来修改表。但是,上面的例子并不是将表重新定义为列的重新排序的公认语法。

最新更新