killme2008/aviatorscript

表达式根据上下文自适应

charlesmiao opened this issue · 4 comments

比如设置一些表达式 A=A1+A2+A3, 当上下文获取到 [A1:3,A2:4],未获取到 A3的值,期望 A=A1+A2=3+4, 但实际结果变成A=3+4+A3,导致计算异常。

实际需求场景还有:
1+ A3[上下文不存在的变量] , 期望 得到 1;
1/ A3[上下文不存在的变量] , 期望 得到 null;
1*A3[上下文不存在的变量] , 期望 得到 null;

由于表达式是前端配置的,一个一个判断非常麻烦,请问有什么好的方法解决此类计算的问题?

在编写表达式时,自行处理没有值的情况,或者给默认值

比如表达式 “A+B”,A, B默认值都是0, 表达式应该如何编写,才能别aviactor识别呢。

我们之前的做法是定义一个自定义函数coalesce,该自定义函数返回第一个非空值。例如coalesce(A, 0) + coalesce(B, 0)

或者自定义EnvProcessor,在生成AviatorEvaluatorInstance手动设置自定义的EnvProcessor