我偶然发现了一个有趣的错误/功能.Q.ty
。
从文档(https://code.kx.com/q/ref/dotq/#ty-type)中可以看出,统一类型列表采用大写字母表示。
但是,我遇到了以下错误/功能:
q).Q.ty(10 10;`abn)
"J"
q).Q.ty 10#(10 10;`abn)
"J"
q)type each(10 10;`abn)
7 -11h
q)type each 10#(10 10;`abn)
7 -11 7 -11 7 -11 7 -11 7 -11h
q)show t:([]a:3 4 5;b:"abc";c:(3;"xy";`ab);d:3 2#3 4 5;e:("abc";"de";"fg");f:(10 10;`abn;10 10))
a b c d e f
------------------------
3 a 3 3 4 "abc" 10 10
4 b "xy" 5 3 "de" `abn
5 c `ab 4 5 "fg" 10 10
q)meta t
c| t f a
-| -----
a| j
b| c
c|
d| J
e| C
f| J
为什么类型不是混合列表?
IIUC,对于列 f,在您的示例中类型是 J 而不是混合类型,因为 meta 仅检查列的第一个项以返回其类型。
元定义页面突出显示以下指针 - https://code.kx.com/q/ref/meta/
下面是更新后的t表,其中f列第一行是混合类型,meta的结果也是如此。
编辑 -
@terrylynch 在评论中建议的 meta 和 .Q.ty 函数的内部工作原理 -
meta
你会看到meta
调用.Q.ty
,然后.Q.ty
调用.Q.tx
,并且在该函数中相关部分是$[0<t:@*x;-t;0h]
......例如“首先输入 x”