通过仅征用一列来创建单行 table

Create single-row table by enlisting only one column

wp/rt-tick 中,我看到了一种通过仅将入伍元素赋予一列来创建单行 table 的技术:

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

这是标准方法吗?我们应该依赖这个功能吗?还有其他情况吗?

Table 列只能由列表组成。对于单行 table,只有一列必须是列表,因为在这种情况下其他列将自动提升为列表。原子被提升为列表是 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)

要从以原子作为值的字典创建 table,您还可以使用 enlist,因为翻转会因排名错误而失败

enlist `a`b!1 2    /works
flip `a`b!1 2      /fails
flip `a`b!(1;2,()) /works

单行 tables 显然可以通过在已创建的 table 上使用 1# 来实现,但是要从头开始创建单行 table,enlist 方法是标准的,值得信赖。

您可以使用空列表

初始化零行table
([]col1:())