关于xkey实施

问题描述

.[0!y;();xcols x]中看到的功能应用方法xkey和有什么区别:

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

一个简单的函数调用x xcols 0!y

为什么函数xkey中优先使​​用?

还有第二个问题,涉及从xcols上下文内部调用k)的情况-它是如何工作的?由于某些原因,我无法执行此操作:

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))

解决方法

我认为该功能适用​​于按名称传递表的情况

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函数修改表。但是,上面的示例不是用于重新定义表以对其列进行重新排序的公认语法。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...