killme2008 / aviatorscript

A high performance scripting language hosted on the JVM.
http://fnil.net/aviator/
4.45k stars 831 forks source link

疑似bug:小于判断时,若env不存在相关值,默认返回true #526

Closed drummerZZ closed 1 year ago

drummerZZ commented 1 year ago

String expression = "a<18"; Map<String, Object> env = Maps.newHashMap(); Assert.assertEquals(false, (Boolean) AviatorEvaluator.execute(expression, env, true)); 如上,当env不传入a时,默认返回为true,期望为false。 对应逻辑在/com/googlecode/aviator/runtime/type/AviatorNumber.java:223 case JavaType: AviatorJavaType otherJavaType = (AviatorJavaType) other; final Object otherValue = otherJavaType.getValue(env); if (otherValue == null) { return 1; } 该处逻辑是否合理?

drummerZZ commented 1 year ago

版本5.3.3

looyn commented 1 year ago

不是bug,参考3.4 nil和传入变量

https://www.yuque.com/boyan-avfmj/aviatorscript/ugbmqm

drummerZZ commented 1 year ago

不是bug,参考3.4 nil和传入变量

https://www.yuque.com/boyan-avfmj/aviatorscript/ugbmqm

你好,谢谢解答,我明白了设计上是:未传入变量会被默认赋值nil,同时任何类型都比nil大。 顺便请教下,“任何类型都比nil大”这个原则现在的版本支持修改吗? 我的场景是判断a<1,不传入a,期望返回false(目前我通过重戴运算符<暂时解决了,但是感觉并不是最佳方案)