在项目中时常需要涉及对表达式的处理,如:
- "3.14 * 2.5 + 103/(24 + 13)" 的值
- "aVar && (bVar || (cVar && dVar))" 的结果
甚至:
- "1==2?50 +50:100+100"
- "if 1==1 then return 100 else return 10;"
- "a love b"
- " for ... "
若实现以上要求QLExpress即可,QLExpress是Quick Laconic Express 高效简洁脚本,淘宝玄难的一个开源的表达式项目,纯java实现。
我们不用再借助groovy也能实现复杂,带有简单逻辑的处理代码,可自定义操作符。
项目地址:http://code.taobao.org/project/view/294/
wiki非常详细,再有其他叙述就是多余(包括技术和使用):http://code.taobao.org/trac/QLExpress/wiki/ZhWikiStart
给出一个在项目中实际使用的例子。
需要判断一个用户是否具有某种符合的权限,如用户是否开通某中服务、是否打上某个标记、
是否附上某个权限code,这些权限还要进行与、或、非等逻辑运算、优先级控制如括号,如:
isService(userid) && ( hasTag("LP") || hasCode(256) ) #开通某个指定的服务, 并且具有"LP"标记或有256权限码。
代码截图如附件图:
这里的场景代码很简单,就是把表达式里的name如isService绑定到对象的方法isService上。
在以前如果我们实现这样的需求,一般把expression写成groovy语法脚本,再在java里调用执行。
如果有其他类似表达式的需要,可以试试QLExpress,能减少不少麻烦,代码里有大量的测试用例参考。
没有评论:
发表评论