我们有一个表格标签
tab:update volume:0n from ([] date:2024.01.01+til 10;sym:10?`appl`msgt`googl;volume:10#(enlist 0.5+300?til 100)) where i in (1;5;8);
我们希望通过以下方式更新列体积:将索引 299 的存储桶值复制到 200,并将 201 的存储桶值设为零到 299。
我们可以像这样使用修改来做到这一点,但是当卷为空/空时,修改会抛出类型错误。
在这种行为中,我们不想抛出错误,而是按原样返回空/空值,并且仅当卷列中有内容时才进行处理。
//original value
first exec volume from select from tab where i=0
//updated expected values, works where volume is not null else gives type error
first exec volume from {[start;end;tab] tt:.[tab;(::;`volume;200);:;.[tab;(::;`volume;299)]]; .[tt;(::;`volume;start+til end-start);:;0f]}[201;299;select from tab where i=0]
但是当我们传递整个表时,这会导致类型错误,其中 volume 为空
first exec volume from {[start;end;tab] tt:.[tab;(::;`volume;200);:;.[tab;(::;`volume;299)]]; .[tt;(::;`volume;start+til end-start);:;0f]}[201;299;select from tab]
我们可以检查音量是否为空的最佳方法是什么,然后返回空/空,做其他任何事情,做这样的处理
update volume:{ $[count x;"do processing here using amend"; x] }'[volume] from tab
分别切换
start
&end
变量为y
&z
。@
这里修改就足够了,因为 lambda 在每个卷行上运行,所以不需要在深度上进行索引。