Kdb 调用字符串()时的输出差异

Kdb 调用字符串()时的输出差异,kdb,q-lang,Kdb,Q Lang,我想把许多不同类型的变量连接成一个字符串。这很有效: q)"select ", string[10:00:00] ," abc" "select 10:00:00 abc" 当我调用带括号的字符串时,输出不同: q)"select ", string(10:00:00) ," abc" "s" "e" "l" "e" "c" "t" " " "10:00:00" ," " ,"a" ,"b" ,"c" 我认为在第一个示例中,函数字符串是使用类型为time的atom参数调用的,而在第二个调用中

我想把许多不同类型的变量连接成一个字符串。这很有效:

q)"select ", string[10:00:00] ," abc"
"select 10:00:00 abc"
当我调用带括号的字符串时,输出不同:

q)"select ", string(10:00:00) ," abc"
"s"
"e"
"l"
"e"
"c"
"t"
" "
"10:00:00"
," "
,"a"
,"b"
,"c"
我认为在第一个示例中,函数字符串是使用类型为time的atom参数调用的,而在第二个调用中,在调用字符串之前创建时间列表


第二个示例中的输出指示了什么?

使用字符串[10:00:00],您正在对输入10:00:00调用字符串函数。使用字符串(10:00:00),“abc”,您将(10:00:00)精确地连接到“abc”,然后对结果进行字符串连接。您必须记住,执行是从右到左执行的

q)(10:00:00) ," abc"
10:00:00
" "
"a"
"b"
"c"
q)string (10:00:00) ," abc"
"10:00:00"
," "
,"a"
,"b"
,"c"

为什么两个示例中的结果都垂直打印?答案中每个命令产生的类型是什么?“abc”只是一个包含4个字符元素的列表。当您加入10:00:00时,您将创建一个包含5个元素的混合列表<代码>q)计数(10:00:00),“abc”(返回5)。为了生成2个列表列表,首先需要登记字符串<代码>q)计数l:(10:00:00),登记“abc”(返回2)
q)l
(返回(10:00:00;“abc”))ok,因此第二个命令输出中的逗号表示对string()的不同调用,每个原子类型调用一次(而不是像第一个命令结果中那样的列表)。我说得对吗?