0

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

这是标准方法吗?我们是否应该依赖此功能,是否还有其他情况也可以使用?

4

1 回答 1

2

表列只能由列表组成。对于单行表,只有一列必须是列表,因为在这种情况下,其他列将自动提升为列表。被提升为列表的原子是 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:())
于 2020-06-25T11:48:03.013 回答