在wp/rt-tick中,我看到了一种通过仅将登记元素提供给一列来创建单行表的技术:
/single-row update for the trade table
(`upd;
`trade;
([]time:enlist 0D10:30:59.5; / <- enlist is only here
sym:`IBM.N;
price:183.1;
size:1000))
这是标准方法吗?我们是否应该依赖此功能,是否还有其他情况也可以使用?
在wp/rt-tick中,我看到了一种通过仅将登记元素提供给一列来创建单行表的技术:
/single-row update for the trade table
(`upd;
`trade;
([]time:enlist 0D10:30:59.5; / <- enlist is only here
sym:`IBM.N;
price:183.1;
size:1000))
这是标准方法吗?我们是否应该依赖此功能,是否还有其他情况也可以使用?
表列只能由列表组成。对于单行表,只有一列必须是列表,因为在这种情况下,其他列将自动提升为列表。被提升为列表的原子是 q 中的一个共同特征,例如以下两个语句给出相同的结果,因为原子 1 被扩展以匹配列表的长度
update col2:3#1 from ([]col1:1 2 3)
update col2:1 from ([]col1:1 2 3)
我们可以看到其他列已从以下位置提升为列表,
q)type each value flip ([]col1:enlist 1;col2:2)
7 7h
col2 值的类型是 7h 而不是 -7h。
Enlist 是实现此目的的标准方法,但您也可以使用 1#,或将空列表加入到元素上,这在实践中通常用于创建一个元素列表
([]col1:(),1;col2:2)
([]col1:1#1;col2:2)
要从具有原子作为值的字典创建表,您还可以使用 enlist,因为翻转将失败并出现排名错误
enlist `a`b!1 2 /works
flip `a`b!1 2 /fails
flip `a`b!(1;2,()) /works
在已经创建的表上使用 1# 显然可以实现单行表,但是从头开始创建单行表 enlist 方法是标准的,可以依赖。
您可以使用空列表初始化零行表
([]col1:())