【发布时间】:2021-01-08 21:19:14
【问题描述】:
我在https://code.kx.com/q/ref/enumerate/ 上没有找到关于enum 在表域上 的信息。但是那里存在一些有趣的东西:https://code.kx.com/q/kb/linking-columns。我尝试了这些示例,发现 enum 结构在某些情况下的行为类似于 normal 枚举,但在其他情况下表现出奇怪的行为。
q)kt:1!t:([]a:`a`b`c;b:10 20 30)
q)tt:([]k:`a`a`a`b;d:11 21 31 41)
q)show et1:`t!t[`a]?tt[`k]
`t!0 0 0 1
q)show et2:`kt$tt[`k]
`kt$`a`a`a`b
q)meta select k,d,et1,et2 from tt
c | t f a
---| ------
k | s
d | j
et1| j t
et2| s kt
q)select r1.a, r1.b, r2.a, r2.b from update r1:et1, r2:et2 from tt
a b a1 b1
----------
a 10 a 10
a 10 a 10
a 10 a 10
b 20 b 20
从这个角度来看,et1 和 et2 都有相似的行为。但如果我们检查其他 enum 属性,我们会发现差异:
q)et2[0]
`kt$`a
q)et2[0]:`a
q)
q)et1[0]
`t!0
q)et1[0]:0 / neither works this
't
[0] et1[0]:0
^
q)et1[0]:(`a`b!(`a;10)) / nor that
't
[0] et1[0]:(`a`b!(`a;10))
^
如果我们只为键控表构建枚举,情况似乎会更奇怪:查看具有一个键列和两个键列的表的区别:
q)kkt:2!t:([]a:`a`b`c;b:10 20 30;c:11 22 33)
q)kt:1!0!kkt
q)show ekkt:`kkt$((`a;10);(`b;20);(`b;20))
`kkt!0 1 1
q)show ekt:`kt$(`a`b`b)
`kt$`a`b`b
kkt 的相同硬编码(使用 !)枚举表示法。
所以问题是:它们是什么? - 那些具有熟悉的$ 和硬编码! 表符号的枚举?是否可以为他们应用enum-extend 技术(?)以及如何应用?他们有任何文件吗?
【问题讨论】: