We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
ExpressRunner runner = new ExpressRunner(); DefaultContext<String, Object> context = new DefaultContext<String, Object>(); runner.setShortCircuit(true); runner.addOperatorWithAlias("而且", "and", "ERROR"); runner.addFunctionOfClassMethod("相等", Object.class.getName(), "equals", new String[]{Object.class.getName()}, "不相等"); runner.addFunctionOfClassMethod("相同", Object.class.getName(), "equals", new String[]{Object.class.getName()}, "不相同"); String express = "(相等 2) 而且 (相同 3)"; List errorList = new ArrayList(); runner.execute(express, context, errorList, false, false); for (String errorInfo : errorList) { System.out.println(errorInfo); }
上述返回结果如下: 不相等 不相同 ERROR
上面test, 是一个 false && false 的测试, 当addOperatorWithAlias()方法设置了错误信息errorInfo的时候, ExpressRunner的逻辑短路属性没有生效, 照样计算了&&右边的操作, 当addOperatorWithAlias的errorInfo设置为null的时候, 逻辑短路属性生效, 没有计算&&右边的逻辑.
经过调试, 当errorInfo设置为null的时候, 指令集: 1:LoadData 2 2:OP : 相等 OPNUMBER[1] 3:GoToIf[false,isPop=false] +4 4:LoadData 3 5:OP : 相同 OPNUMBER[1] 6:OP : && OPNUMBER[2] 这个时候当执行到指令3的时候, 满足条件, 跳过后面的指令, 返回结果, 此时只计算&&左边.
而errorInfo有值的时候, 解析得到的指令集: 1:LoadData 2 2:OP : 相等 OPNUMBER[1] 3:LoadData 3 4:OP : 相同 OPNUMBER[1] 5:OP : 而且 OPNUMBER[2] 不会有GoToIf的指令, 继续执行了&&右边的逻辑, 此时逻辑短路属性不生效.
原因是: addOperatorWithAlias()方法, 当参数errorInfo是否有值的是的时候, 内部走了不同的逻辑, errorInfo=null的时候, 生成的Node带有realNodeType参数: , 而errorInfo!=null的时候, 生成的Node不带有realNodeType参数: 后面解析的时候, errorInfo=null的因带有realNodeType, 会生成GoToIf指令且条件成立, 跳出后续指令, errorInfo!=null的, 不会生成GoToIf指令
The text was updated successfully, but these errors were encountered:
不知道您的原始诉求是什么?
Sorry, something went wrong.
No branches or pull requests
ExpressRunner runner = new ExpressRunner();
DefaultContext<String, Object> context = new DefaultContext<String, Object>();
runner.setShortCircuit(true);
runner.addOperatorWithAlias("而且", "and", "ERROR");
runner.addFunctionOfClassMethod("相等", Object.class.getName(), "equals", new String[]{Object.class.getName()}, "不相等");
runner.addFunctionOfClassMethod("相同", Object.class.getName(), "equals", new String[]{Object.class.getName()}, "不相同");
String express = "(相等 2) 而且 (相同 3)";
List errorList = new ArrayList();
runner.execute(express, context, errorList, false, false);
for (String errorInfo : errorList) {
System.out.println(errorInfo);
}
上述返回结果如下:
不相等
不相同
ERROR
上面test, 是一个 false && false 的测试, 当addOperatorWithAlias()方法设置了错误信息errorInfo的时候, ExpressRunner的逻辑短路属性没有生效, 照样计算了&&右边的操作, 当addOperatorWithAlias的errorInfo设置为null的时候, 逻辑短路属性生效, 没有计算&&右边的逻辑.
经过调试, 当errorInfo设置为null的时候, 指令集:
1:LoadData 2
2:OP : 相等 OPNUMBER[1]
3:GoToIf[false,isPop=false] +4
4:LoadData 3
5:OP : 相同 OPNUMBER[1]
6:OP : && OPNUMBER[2]
这个时候当执行到指令3的时候, 满足条件, 跳过后面的指令, 返回结果, 此时只计算&&左边.
而errorInfo有值的时候, 解析得到的指令集:
1:LoadData 2
2:OP : 相等 OPNUMBER[1]
3:LoadData 3
4:OP : 相同 OPNUMBER[1]
5:OP : 而且 OPNUMBER[2]
不会有GoToIf的指令, 继续执行了&&右边的逻辑, 此时逻辑短路属性不生效.
原因是:
,

addOperatorWithAlias()方法, 当参数errorInfo是否有值的是的时候, 内部走了不同的逻辑, errorInfo=null的时候, 生成的Node带有realNodeType参数:
而errorInfo!=null的时候, 生成的Node不带有realNodeType参数:
后面解析的时候, errorInfo=null的因带有realNodeType, 会生成GoToIf指令且条件成立, 跳出后续指令, errorInfo!=null的, 不会生成GoToIf指令
The text was updated successfully, but these errors were encountered: