KDB 如何通过引用更新 table 而不会出现分配错误?

KDB how to update a table by reference without getting an assign error?

我想通过引用更新 table 而不会在 kdb 中出现分配错误,即

q)tab:1!(flip`a`b`c!(til 10;10?50;10?100));
q)k:2#key[tab];
q)(`tab[k;`b`c])*:2;
parse error
assign

 q)[.:][`tab][k;`b`c]*:2;
    parse error
    assign

(显然不能为派生变量赋值)

特别是以下工作:

q)(tab[k;`b`c])*:2;

我在这里假设有比使用 eval 或 value[`tab] 更好的方法来实现这一点我希望我能得到第二个意见。 如上例所示,如何使用对 table 的“符号”引用来实现引用集? 再次感谢,致以最诚挚的问候。

您所说的“有效”无效:

q)tab[k;`b`c]:0 1;
'length
  [0]  tab[k;`b`c]:0 1;
                  ^

您一定一直在使用未加密的 table 而不是加密的 table。

最终归结为 table 是否键控以及您使用什么索引到 table(键或索引)。

键控 table - 键查找

q)tab:1!(flip`a`b`c!(100+til 10;10?50;10?100))
q)k:100 101
q).[`tab;(([]a:k);`b);:;0 1]

未加密 table - 索引查找

q)tab:(flip`a`b`c!(100+til 10;10?50;10?100))
q)k:0 1
q).[`tab;(k;`b);:;0 1]