锁定老帖子 主题:表达式引擎JSEL介绍
精华帖 (0) :: 良好帖 (1) :: 新手帖 (0) :: 隐藏帖 (7)
|
|
---|---|
作者 | 正文 |
发表时间:2010-08-15
最后修改:2010-08-15
olivechinese 写道 周未用了下
JSEL 发现JSEL对 纯 数学运算 在同类产品中,效率是最高的, 但是在 对象运算中如, 'A' == 'A' || 'B' == 'B' && 'ABCD' == ABCD && 'A' == 'A' 或其他自定义对象中,效率要比JEXL要低, 希望能改进这方面的算法 非常感谢你的关注,更重要的是,你这个测试让我发现了一个bug,运算符优先级的问题: 运算符二级优先级判断错误 这个问题已经在今天中午发布的2.0A4中修复。 修复这个问题后,我这边的测试数据是: --------------------- Source:'A' == 'A' || 'B' == 'B' && 'ABCD' == t && 'A' == 'A' (result=true) Labels: MVEL Ognl Aviator JXEL JSEL Times: 3.019352 0.985064 11.102609 11.200559 0.531242 Scale: 5.683572 1.854266 20.899343 21.083723 1.0 --------------------- Source:1000+100.0*99-(600-3*15)%(((68-9)-3)*2-100)+10000%7*71(result=11181.0) Labels: MVEL Ognl Aviator JXEL JSEL Times: 0.307111 0.172375 10.650497 44.61275 0.507288 Scale: 1.7816447 1.0 61.786785 258.8122 2.9429326 --------------------- 测试结果不一致:MVEL=-7,Ognl=1 测试结果类型不一致:result=1,Ognl=class java.lang.Integer,Aviator=class java.lang.Long 测试结果类型不一致:result=1,Aviator=class java.lang.Long,JXEL=class java.lang.Integer 测试结果类型不一致:result=1,JXEL=class java.lang.Integer,JSEL=class java.lang.Long Source:6.7-100>39.6 ? 5==5? 4+5:6-1 : !(100%3-39.0<27) ? 8*2-199: 100%3(result=1) Labels: MVEL Ognl Aviator JXEL JSEL Times: 5.123787 0.164249 4.438563 12.610787 0.110355 Scale: 46.43004 1.4883693 40.220768 114.27472 1.0 --------------------- 表达式测试异常:Ognljavassist.CannotCompileException: [source error] ) is missing 测试结果不一致:MVEL=true,Ognl=null 测试结果不一致:Ognl=null,Aviator=true Source:i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99 ==i * pi + (d * b - 199) / (1 - d * pi) - (2 + 100 - i / pi) % 99(result=true) Labels: MVEL Ognl Aviator JXEL JSEL Times: 234.21127 2147.4836 61.84004 14.983838 8.319792 Scale: 28.151098 258.11746 7.432883 1.8009871 1.0 --------------------- 测试结果不一致:MVEL=314.0000104904175,Ognl=314.0 测试结果不一致:Ognl=314.0,Aviator=314.0000104904175 测试结果不一致:Aviator=314.0000104904175,JXEL=314.0 测试结果类型不一致:result=314.0,JXEL=class java.lang.Double,JSEL=class java.lang.Float Source:i * pi(result=314.0) Labels: MVEL Ognl Aviator JXEL JSEL Times: 5.42876 0.374265 2.375617 0.92347 0.844769 Scale: 14.505123 1.0 6.3474197 2.4674227 2.2571414 --------------------- 测试结果类型不一致:result=1,Ognl=class java.lang.Integer,Aviator=class java.lang.Long 测试结果类型不一致:result=1,Aviator=class java.lang.Long,JXEL=class java.lang.Integer 测试结果类型不一致:result=1,JXEL=class java.lang.Integer,JSEL=class java.lang.Long Source:1(result=1) Labels: MVEL Ognl Aviator JXEL JSEL Times: 0.122759 0.14885 1.7152 0.039351 0.053039 Scale: 3.1195903 3.782623 43.587204 1.0 1.3478438 --------------------- 表达式测试异常:Aviatorcom.googlecode.aviator.exception.ExpressionRuntimeException: Execute expression error 测试结果不一致:Ognl=4,Aviator=null 测试结果不一致:Aviator=null,JXEL=4 Source:thiz.add(1,3)(result=4) Labels: MVEL Ognl Aviator JXEL JSEL Times: 43.03785 1.216466 2147.4836 16.89494 13.938891 Scale: 35.37941 1.0 1765.3462 13.888543 11.458512 |
|
返回顶楼 | |
发表时间:2011-03-11
MVEL的官方例子里面好像只支持Integer和String两种类型的参数.想问下你用MVEL测试上面运算式时是怎么通过的.
测试代码: Map<String, Double> test = new HashMap<String, Double>(); test.put("a", new Double(9.3)); test.put("b", new Double(3.7)); String result = (String)MVEL.eval("a * b", test); 输出的异常: Exception in thread "main" java.lang.ClassCastException: java.lang.Double at test.Test.main(Test.java:19) |
|
返回顶楼 | |