KDB - 运行一个函数,其中函数名称和参数作为字符串

时间:2018-04-20 09:16:25

标签: kdb

我正在整理一个查询KDB会话并将各种数据位返回到前端的进程。 前端将参数传递给KDB会话,该会话是一个以字符串形式出现的表名 - 例如"table",其中table是KDB会话中的表

我可以在所引用的基础表上运行一些简单的KDB函数,例如:

count `$"table"
cols `$"table"

在其他情况下,前端将一个字符串传递给KDB会话,该会话指定一个函数和一个参数,该参数在运行时返回一个等于上面table的表 - 例如"function parameter" 我想在运行function parameter

返回的表上运行相同的简单函数

以下内容不会分别返回相当于count tablecols table的输出:

count `$"function parameter"
cols `$"function parameter"

从字符串"function parameter"

隐含的表格中获取计数和列数的最佳方法是什么?

非常感谢!

3 个答案:

答案 0 :(得分:5)

在您的示例中,cols能够将表或表的名称作为参数作为符号,这就是它按预期返回列名的原因。 count不能将表的名称作为参数,因此只返回1,因为只有一个符号元素。

"function parameter"已被强制转换为符号`function parameter并且没有具有此名称的表,因此将此作为参数传递给cols会抛出错误,同时将其传递给{出于与以前相同的原因,{1}}将返回1。

您可能有兴趣将count函数与字符串参数一起使用,并在此处提供文档:http://code.kx.com/q/ref/metadata/#value

它将评估字符串参数,就好像它已被输入命令提示符一样。使用value将返回value "table"变量,table将使用参数运行函数,该参数也是表格。

然后可以使用value "function parameter"count value "function parameter"将这些函数传递到您的简单函数中,以返回所需的输出。

希望这很有用,

标记

答案 1 :(得分:2)

{simple function} eval eval parse "x"应该适用于两者。

答案 2 :(得分:1)

count get["function parameter"]
cols get["function parameter"]

应该可以工作,并且不要求你将参数从字符数组转换为符号。