【问题标题】:KDB - Is there a limit to the number of functions called at one time when updating tables?KDB - 更新表时一次调用的函数数量是否有限制?
【发布时间】:2020-09-01 16:30:46
【问题描述】:

我一直在运行许多函数来更新表格,并且我不断添加更多函数,因为我希望更新和调用其他各种项目。我还没有遇到任何问题(目前有 7 个函数),但我注意到可能存在限制。我确实发现单个函数有 8 个参数的限制,但没有注意到以下限制。如果没有,那就太好了。我想在扩大规模时保持警惕。

updateTable: FuncG FuncF FunE FuncD FuncC FuncB FuncA ::;  // max number of functions?
t: updateTable t;

【问题讨论】:

  • 可以调用的函数数量没有限制

标签: kdb


【解决方案1】:

我用大量函数调用做了一个虚假的更新语句,看起来你很好:

q)t:([]a:1 2 3)
q)f:{x+1}
q)value "update ",(raze 1000#enlist"f "),"a from t"
a   
----
1001
1002
1003

您可能想做的一件事是从您的函数列表中创建一个函数composed

q)f:{x+1}
q)g:{2*x}
q)h:{x+1+2}
q)(('[;])/)(f;g;h)
{x+1}{2*x}{x+1+2}
q)composed:(('[;])/)(f;g;h)
q)t:([]a:1 2 3)
q)update composed a from t
a
--
9
11
13

这样您的更新语句中只有一个函数,它应该可以扩展。

【讨论】:

  • 谢谢 Matthew,我不确定,因为我没有看到任何记录。另外,我已经习惯了语法,但如果我理解你的组合变量 (('[;])/): 转换为“以下参数 (f;g;h) 的每个参数并首先计算函数 h。我的函数有一个调用顺序,所以我只是想确保我以正确的顺序调用它们。
  • 是的,所以 ' 是组合运算符,它需要两个单参数函数并将它们组合以返回一个单参数函数。如果要组合两个以上函数的列表,则必须使用 over 迭代器。给定一个参数x,函数会先计算h x,然后是g (h x),然后是f (g (h x)),所以整个事情就相当于做了{f g h x}
猜你喜欢
  • 2021-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 2018-06-22
  • 2018-01-18
  • 1970-01-01
相关资源
最近更新 更多