函数在 kdb/q 中没有 return 值

Function does not return value in kdb/q

我在kdb/q中有一个函数声明:

q)func_demo:{[time1;time2] select from t where time within(time1 time2)}

时间的数据类型是 v。并且查询完美无缺。

我将两次时间传递给函数:

q)func_demo[13:00:00 13:00:02]

但是控制台中没有显示 table,它给了我这样的信息:

{[time1;time2] select from tt where tp_time within(time1 time2)}[13:00:00 13:00:02]

有人可以给我一些提示如何处理这个问题吗?是因为我传入参数的时候没有把13:00:00转成'v'吗?

非常感谢!

你的函数有两个参数 time1 和 time2 在你的行中 q)func_demo[13:00:00 13:00:02] 你只传递函数一个参数,它是一个时间列表。

你的意思是通过q)func_demo[13:00:00;13:00:02]

返回的其实是函数投影。下面代码解释

q)f:{x+y}
q)f[2;2]
4
q)f[2 2]
{x+y}[2 2]
q)proj:f[2 2]
q)proj 10 100
12 102
q)proj
{x+y}[2 2]

您需要按照@emc211 的建议传递参数;但是您使用的函数有问题 (time1 time2)

{[time1;time2] select from tt where tp_time within(time1 time2)}[13:00:00;13:00:02]

应该是(time1;time2)-time1

后的分号(;
{[time1;time2] select from tt where tp_time within(time1; time2)}[13:00:00;13:00:02]

解释:

time1:13:00:00
time2:13:00:02

这类似于 time1@time2

q)(time1 time2)
'type
[0]  (time1 time2)

要使用 time1time2 作为列表:

q)(time1;time2)
13:00:00 13:00:02

如果您使用的是实际值,则无需为相似类型的元素指定 ;

(time1;time2)~(13:00:00 13:00:02)
1b