如何获取给定命名空间中可用函数及其参数的列表?
答案 0 :(得分:5)
http://code.kx.com/q/ref/syscmds/#f-functions
\f .
\f .namspace
对于功能,您只需通过给出功能名称
来单独检查参数.n.function
不仅会为您提供参数,还会为您提供整个函数定义。
答案 1 :(得分:2)
这肯定可以改进,但我认为我会分享一个快速的方法来让球滚动。这将检索每个工作空间中的每个全局用户定义函数,并创建一个namespapaces字典,以便为参数提供函数。
q)getparams:{k!{n[w]!@'[;1] value each f w:where 100h=type each f:get each ".",/:"." sv/:string x,/:n:y x}[;m] each key m:k!system each "f .",/:string k:key `}
q)f1:{x+y+z}
q).n1.f2:{x*x}
q).n1.a:2
q).n2.f3:{y+y}
q)show r:getparams[]
q | `aj`aj0`asc`asof`avgs`cols`cor`cov`cross`cut`desc`dev`each`ej`except`fby`..
Q | `Cf`IN`L`S`V`addmonths`bv`chk`cn`d0`dd`def`dpft`dpt`dsftg`dt`en`f`fc`ff`f..
h | `cd`code`data`eb`ec`ed`edsn`es`fram`ha`hb`hc`hn`hr`ht`hta`htac`htc`html`h..
n1| (,`f2)!,,`x
n2| (,`f3)!,`x`y
q)r[`n1;`f2]
,`x
[编辑]原来的功能错了。它错过了全局命名空间(`),并没有捕获用副词定义的组合或函数。以下纠正了这一点,但似乎过于复杂。我还是会留在这里,以防万一有人想发布一个更好的解决方案(这样我也可以从中学习)
getparams:{k!{n[w][w2]!@'[;1] v w2:where 0h=type each v:value/[{type[x] in y}[;t]; ] each f:f w:where in[ ;(t:"h"$100,105+til 7)] type each f:get each `$".",/:"." sv/:string x,/:n:y x}[;m] each key m:k!system each "f .",/:string k:`,key `}
答案 2 :(得分:0)
除了Naveen的回答之外,您还可以拨打value functionName
,它会为您提供一个项目列表,例如:参数名称和编译的字节代码