以字符串为参数的函数

时间:2018-09-06 06:11:45

标签: kdb

在kdb中,我希望有一个将字符串作为参数的函数。

myfunc: {[strParam]
    .... 
}

但是,当我尝试调用该函数时。

q) myfunc["test"]

它抱怨length错误。似乎该函数将"test"视为传递了4个char参数。我怎样才能让函数期望一个字符串?

2 个答案:

答案 0 :(得分:3)

kdb中的字符串被定义为字符列表,因此使用它们的函数必须能够处理此问题。

q)count "test"
4

您也可以使用符号代替使用`symbol$"test"从字符串进行强制转换。符号是原子的且固定的宽度,因此用作字典或表格的键很有用。某些字符串功能仍可在符号上使用,例如

q)upper `test
`TEST

列表操作不起作用,并且您必须先使用string `test将其转换为字符串,然后再使用这些操作。

当引发长度错误并进入带有两个方括号q))的q提示符所示的调试模式时,可以使用函数.z.ex显示失败的函数,而{{1 }},以查看失败的参数以缩小引发错误的部分。

答案 1 :(得分:0)

该错误可能由于多种原因而出现。

q)f:{[p] show p}  //it works fine with any number of elements 
q)f["abc"]
"abc"

f:{[p] enlist[`k]!p}   //needs a list of single element
f["abc"]
'length

f[enlist "abc"]      
(enlist `k)!enlist "abc"

q)f:{[p] 1 2 3 4!p}    //the length of values is different from the length of keys
q)f["abc"]
'length

q)f["abcd"]
(1j, 2j, 3j, 4j)!"abcd"