Согласно документации на https://code.kx.com/q/ref/enumerate/
Перечислить
Синтаксис: 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
в файл не сохраняет ключей! В сеансе fre sh:
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 extension функциональностью:
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