在DolphinDB database中,我的代码如下:
def parse_signals(mutable tbl_value, value){
kvs = split(value, ',');
d = dict(STRING, STRING);
for(kv in kvs) {
sp = split(kv, ':');
d[sp[0]] = sp[1];
}
insert into tbl_value values(date(d[`tradingday]), d[`signal_id], d[`index], d[`underlying], d[`symbol], int(d[`volume]), int(d[`buysell]), int(d[`openclose]), temporalParse(d[`signal_time], "HHmmssSSS"));
}
tbl_value=table(100:0, [`tradingday,`signal_id,`index,`underlying,`symbol,`volume,`buysell,`openclose,`signal_time],[DATE,SYMBOL,SYMBOL,SYMBOL,SYMBOL,INT,INT,INT,TIME]);
v1="tradingday:2020.06.03,signal_id:1,index:000300,underlying:510300,symbol:10002985,volume:2,buysell:0,openclose:0,signal_time:093000120";
v2="tradingday:2020.06.04,signal_id:2,index:000500,underlying:510050,symbol:10002986,volume:3,buysell:1,openclose:1,signal_time:093100120"
parse_signals(tbl_value, v1);//It's OK.
peach(parse_signals{tbl_value}, [v1, v2]);
在GUI中执行时,单独调用parse_signals可以,但如上所示最后一行代码用peach调用时,报错:Not allowed to create void vector,请问是什么原因?
peach是一个高阶函数,并行执行多个任务。以第一个任务的结果来决定整个函数的运行结果。如果单个任务返回的是一个scalar,那么peach返回一个vector,单个任务返回vector,那么peach返回matrix,单个任务返回字典,peach返回table。
该问题中的parse_signals函数没有任何返回值(也就是返回一个NOTHING标量),所以peach试图去创建一个类型为void的vector。这在DolphinDB中是不允许的。
请改为ploop。ploop返回一个tuple,每个单独任务的返回值作为tuple的每一个元素。