killme2008 / aviatorscript

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

判断表达式age<18 age为null返回true #542

Closed guosansan closed 1 year ago

guosansan commented 1 year ago

示例代码

@Test
    void testVar3() {
        String expression = "age<18";
        Expression compiledExp = AviatorEvaluator.compile(expression);
        List<String> variableNames = compiledExp.getVariableNames();
        logger.info("expression:{} variables:{}", expression, variableNames);

        Map<String, Object> env = new HashMap<>();
        env.put("age", null);

        boolean result = (Boolean) compiledExp.execute(env);
        logger.info("expression execute result:{}", result);
    }

结果日志

expression:age<18 variables:[age]
 expression execute result:true

期望值

返回false

NewGr8Player commented 1 year ago

@guosansan Any object is greater than nil except nil https://github.com/killme2008/aviatorscript/blob/20a3c7f432446861da28a67d5fdee7d959fcc05c/src/main/java/com/googlecode/aviator/runtime/type/AviatorNil.java#L57-L68