请问下为什么一个函数单独调用可以,但用peach调就报Not allowed to create void vector

在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,请问是什么原因?

请先 登录 后评论

1 个回答

logger


peach是一个高阶函数,并行执行多个任务。以第一个任务的结果来决定整个函数的运行结果。如果单个任务返回的是一个scalar,那么peach返回一个vector,单个任务返回vector,那么peach返回matrix,单个任务返回字典,peach返回table。


该问题中的parse_signals函数没有任何返回值(也就是返回一个NOTHING标量),所以peach试图去创建一个类型为void的vector。这在DolphinDB中是不允许的。


请改为ploop。ploop返回一个tuple,每个单独任务的返回值作为tuple的每一个元素。


请先 登录 后评论