我正在尝试从表中调用函数及其参数。所以我通过以下方式调用该函数:
(first exec function from table where id=jobId)
在此示例中,我得到:+
然后我将参数称为:
[first exec args from table where id=jobId]
以我为例[2 2]
将两行依次运行为:
`(first exec func from table where id=jobId)[first exec args from .table where id=jobId]`
请给我:+ [2 2]
但是我需要:+ [2; 2]。
我正在从文档中阅读此声明,但无法完全实现。
” exec(?[;;;])的功能形式的参数必须以解析形式传递,并根据所需结果在特定的数据结构中传递。 “
我试图将参数部分的传递转换为如下所示的函数调用:
?[table;jobId=id;args;()]
答案 0 :(得分:5)
要涵盖具有单个输入,多个输入等功能的一般情况,您需要类似以下内容:
q)t:([]func:({x+1};floor;{x+y};first;{x+100});args:(12;1.5;2 2;"abc";`foo))
q)t
func args
-------------
{x+1} 12
_: 1.5
{x+y} 2 2
*: "abc"
{x+100} `foo
q)update res:{.[x;(),y;@[x;y;]`$]}'[func;args] from t
func args res
-------------------
{x+1} 12 13
_: 1.5 1
{x+y} 2 2 4
*: "abc" "a"
{x+100} `foo `type
答案 1 :(得分:4)
要从表中调用函数和参数,可以使用.
应用,如下所示:
q)table:([] function:+;args:enlist 2 2;id:1)
q)table
function args id
----------------
+ 2 2 1
q)exec .[first function;first args] from table where id=1
4
希望这会有所帮助。
答案 2 :(得分:1)
如果您要对参数执行函数,则可以直接在select / exec语句中执行。
q) exec function .' args from table where id=1
答案 3 :(得分:1)
我想你的桌子看起来像这样
q)show table:([] function:(+;*;{x+2*y}); args:(2 2;9 7;1 3); id:0 1 2)
function args id
----------------
+ 2 2 0
* 9 7 1
{x+2*y} 1 3 2
拥有函数和参数后,可以使用.(apply)进行应用:
q)jobId:1
q)(first exec function from table where id=jobId) . first exec args from table where id=jobId
63
如果您使用'(each-both)副词,则可以将上面的查询简化为仅执行一次:
q)first exec function .' args from table where id=1
63
如果删除上面的where子句,则可以得到将每个函数应用于每个参数的结果:
q)update result:function .' args from table
function args id result
-----------------------
+ 2 2 0 4
* 9 7 1 63
{x+2*y} 1 3 2 7