我们有两个表“ t”和“ s”。
这些表可能有也可能没有数据,但是t和s的模式始终相同。
Tables:
q)t:([] id:("ab";"cd";"ef";"gh";"ij"); refid:("";"ab";"";"ef";""); typ:`BUY`SELL`BUY`SELL`BUY)
q)s:t / For example purpose
现在,在我的职能中。我想连接这两个表的输出并返回它,为此我使用了名为res的变量。
问题最初是res为空,而不是类型为98h,因此,如果我尝试将t或s联接到res上,那么它将失败(这很明显)。
q){$[not ((count res) ~ 0); res: res,t ; res:t ]; $[not ((count res) ~ 0); res: res,s ; res:s ]; :res}[]
'res
一种解决方案是为res(与t和s表相同)创建一个空模式,并且效果很好。
q){res:([] id:(); refid:(); typ:`$());$[not ((count res) ~ 0); res: res,t ; res:t ]; $[not ((count res) ~ 0); res: res,s ; res:s ]; :res}[]
但是,有没有一种方法,我们不必事先为所有列的res创建空模式,而是将res分配为null(empty)表,当t或s时,该表可以获得与t或s相同的模式与res结合在一起。
答案 0 :(得分:1)
您的示例尚不完全清楚-您提到res
已存在于注释中,但随后声明“初始res为空且不是98h类型”。
如果只想将res分配为空表(如果尚不存在),则可以使用系统命令来检查根名称空间中是否已经定义了res,如下所示:
f:{
if[not res in system"a";res:()]
$[count res;res,:t;res:t];
$[count res;res,:s;res:s];
:res;
};
答案 1 :(得分:0)
将res分配为0即可使用所讨论的模式。
q)t:([] id:("ab";"cd";"ef";"gh";"ij"); refid:("";"ab";"";"ef";""); typ:`BUY`SELL`BUY`SELL`BUY)
q)res:0#t
q)meta res
c | t f a
-----| -----
id |
refid|
typ | s
因此,在这种情况下,您可以执行以下操作
q){[]res:0#t;if[count res;res,:t];$[count res;res,:s;res:s]}[]