在kdb中,我希望有一个将字符串作为参数的函数。
myfunc: {[strParam]
....
}
但是,当我尝试调用该函数时。
q) myfunc["test"]
它抱怨length
错误。似乎该函数将"test"
视为传递了4个char参数。我怎样才能让函数期望一个字符串?
答案 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"