枚举不保存它的键,只是对键的引用
Enum does not hold its keys, only a ref to keys instead
根据 https://code.kx.com/q/ref/enumerate/
上的文档
Enumerate
Syntax: x$y, $[x;y]
Where
x
and y
are lists
我认为创建 enum
的正确方法是将列表提供给 $
:
q)e:`a`b`c$`b`a`c`c`a`b
'length
[0] e:`a`b`c$`b`a`c`c`a`b
^
但显然不是。在阅读了更多示例后,我尝试了:
q)mykeys:`a`b`c
q)show e:`mykeys$`b`a`c`c`a`b
`mykeys$`b`a`c`c`a`b
并且有效。但是后来我看到我的 enum
e
包含它的值,并且 只是对其键 mykeys
:
的引用
q)(key;value)@\:e
`mykeys
`b`a`c`c`a`b
q)`:e.raw set e
`:e.raw
因此,将 e
保存到文件不会保存密钥!在新会话中:
q)e: get `:e.raw
q)e
`mykeys!1 0 2 2 0 1
q)mykeys
'mykeys
[0] mykeys
^
q)mykeys:`a`b`c
q)e
`mykeys$`b`a`c`c`a`b
我知道可以使用简洁的 enum extend 功能来保存密钥:
q)`:mykeys?`b`a`c`c`a`b;
q)get `:mykeys
`b`a`c
但为什么枚举会这样呢? - 似乎他们几乎没有分裂成 keys 和 values。可能与 table 的大图、索引、table 展开更有意义。
枚举如何在从文件加载后就存在?它的keys域还不存在是半正常状态吗?:
q)e: get `:e.raw
q)e
`mykeys!1 0 2 2 0 1
此行为是设计使然,因为正如您所推测的那样,存在更大更普遍的情况。
枚举主要用于:
- sym 文件,在 enum-extend
?
的帮助下,syms(密钥)始终永久存储在数据库中
- 外键,根据 https://code.kx.com/q4m3/8_Tables/#852-example-of-simple-foreign-key
在后一种情况下,将键与枚举一起存储是没有意义的,因为键是 table 的内容。据推测,如果您将保留枚举,那么您还将保留包含键的 table 。
一个类似的概念是列链接 - https://code.kx.com/q/kb/linking-columns/
最后,原因
`a`b`c$`b`a`c`c`a`b
没有用是因为您要枚举的列表必须按名称传递,而不是按值传递。所以必须是
`mykeys$`b`a`c`c`a`b
根据 https://code.kx.com/q/ref/enumerate/
上的文档Enumerate
Syntax:
x$y, $[x;y]
Where
x
andy
are lists
我认为创建 enum
的正确方法是将列表提供给 $
:
q)e:`a`b`c$`b`a`c`c`a`b
'length
[0] e:`a`b`c$`b`a`c`c`a`b
^
但显然不是。在阅读了更多示例后,我尝试了:
q)mykeys:`a`b`c
q)show e:`mykeys$`b`a`c`c`a`b
`mykeys$`b`a`c`c`a`b
并且有效。但是后来我看到我的 enum
e
包含它的值,并且 只是对其键 mykeys
:
q)(key;value)@\:e
`mykeys
`b`a`c`c`a`b
q)`:e.raw set e
`:e.raw
因此,将 e
保存到文件不会保存密钥!在新会话中:
q)e: get `:e.raw
q)e
`mykeys!1 0 2 2 0 1
q)mykeys
'mykeys
[0] mykeys
^
q)mykeys:`a`b`c
q)e
`mykeys$`b`a`c`c`a`b
我知道可以使用简洁的 enum extend 功能来保存密钥:
q)`:mykeys?`b`a`c`c`a`b;
q)get `:mykeys
`b`a`c
但为什么枚举会这样呢? - 似乎他们几乎没有分裂成 keys 和 values。可能与 table 的大图、索引、table 展开更有意义。
枚举如何在从文件加载后就存在?它的keys域还不存在是半正常状态吗?:
q)e: get `:e.raw
q)e
`mykeys!1 0 2 2 0 1
此行为是设计使然,因为正如您所推测的那样,存在更大更普遍的情况。
枚举主要用于:
- sym 文件,在 enum-extend
?
的帮助下,syms(密钥)始终永久存储在数据库中
- 外键,根据 https://code.kx.com/q4m3/8_Tables/#852-example-of-simple-foreign-key
在后一种情况下,将键与枚举一起存储是没有意义的,因为键是 table 的内容。据推测,如果您将保留枚举,那么您还将保留包含键的 table 。
一个类似的概念是列链接 - https://code.kx.com/q/kb/linking-columns/
最后,原因
`a`b`c$`b`a`c`c`a`b
没有用是因为您要枚举的列表必须按名称传递,而不是按值传递。所以必须是
`mykeys$`b`a`c`c`a`b