Kdb Enum不保存其键,只保留对键的引用

Kdb Enum不保存其键,只保留对键的引用,kdb,k,Kdb,K,根据 列举 语法:x$y,$[x;y] 在哪里 x和y是列表 我认为创建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 它是有效的。但是我看到我的enume包含它的值

根据

列举 语法:
x$y,$[x;y]

在哪里

  • x
    y
    是列表
我认为创建
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
我知道可以使用简洁的枚举扩展功能保存密钥:

q)`:mykeys?`b`a`c`c`a`b;
q)get `:mykeys
`b`a`c
但是为什么枚举的行为是这样的呢看起来它们几乎没有分裂成键和值。可能是在一个大的图片与表,索引,表伸展它更有意义

从文件加载后,枚举如何存在?当其密钥域尚不存在时,是否为半正常状态

q)e: get `:e.raw
q)e
`mykeys!1 0 2 2 0 1

这种行为是有意为之的,因为正如你所设想的那样,有一个更大、更普遍的图景

枚举主要用于:

  • sym文件,其中sym(键)在enum extend的帮助下始终永久存储在数据库中。
  • 外键,根据
  • 在后一种情况下,也将键与枚举一起存储是没有意义的,因为键是表的内容。假定如果要持久化枚举,则还将持久化包含键的表

    类似的概念是列链接-

    最后,原因是什么

    `a`b`c$`b`a`c`c`a`b
    
    不起作用是因为您要枚举的列表必须按名称传递,而不是按值传递。所以必须这样

    `mykeys$`b`a`c`c`a`b
    

    感谢您指出一个必须按名称传递的函数参数。我发现
    get
    要求其参数也是
    符号的人。它就像
    C
    中的指针,对吗?如果我这样想的话,画面会更清晰。