(注:相关代码请参考 com.ql.util.express.test.logic.ShortCircuitLogicTest类,
QLExpress 源代码下载地址:http://code.taobao.org/p/QLExpress/src/ )
昨天收到一份厂外人士的邮件,需求如下:
天樵,您好! 网上看到你BLOG中开源出的QLExpress表达式,在实际的项目应用中有个问题请教你一下: 我们的项目想要使用QLExpress表达式来控制业务操作的可行性校验,通过表达式返回的true/false 确定业务操作是否被允许 例如: 用户.状态 =='有效' && (用户.网龄 > 2年 || 用户.类型=='VIP') 但是要求结果除了true/false外,如果最终操作不被允许,还想得出具体不被允许的原因(哪一段、几段原子表达式导致了整体的结果为不通过);、、 目前未在QL中看到类似功能,如果想要基于QLExpress来实现,希望你能向我们提供一些方向或者指导性的意见。
其实逻辑方面的控制大概在两年前我们就已经实现了,而且淘宝内部业务系统也多有在使用。物流宝,营销系统,监管系统等等。
隐含两个需求:
1、避免逻辑短路,因为要输出所有出错信息。
2、友好地显示出错信息。
解答:1
第一个问题很好解决:设置runner属性即可,这个设置在很多场景下还是很有用的(即想运行完所有的表达式,又想获取一个最后的结果)。
runner.setShortCircuit(true);
解答:2
ExpressRunner.addOperatorWithAlias(String keyWordName, String realKeyWordName,String errorInfo)
美其名曰:“操作符 重命名”,这个函数其实是专为逻辑判断出错信息的设计的。
例如我希望 (100 小于 99) 的时候报错,那我就可以重新定义下 “<”
runner.addOperatorWithAlias("小于","<","$1 小于 $2 不满足期望");
这样就会显示出错信息: 100小于99不满足期望
那有些大哥会苦恼了 ,我如果表达式内容就希望是 (100<99)而非 (100 小于 99)怎么办?
由于受限于ExpressRunner内部的操作符体系设计,我们只能妥协下,先做一个文字替换工作。
text = "100<99 and 100<=99 and 100>1"; text = text.replaceAll("<",“小于”).replaceAll("<=",“小于或等于”).replaceAll(">","大于"); runner.setShortCircuit(true); runner.addOperatorWithAlias("小于","<","$1 小于 $2"); runner.addOperatorWithAlias("小于或等于","<=","$1 小于 $2"); runner.addOperatorWithAlias("大于",">","$1 小于 $2"); List<String> errorInfo = new ArrayList<String>(); IExpressContext<String,Object> expressContext = new DefaultContext<String,Object>(); runner.execute(text , expressContext, errorInfo, true, false); if(result){ System.out.println("result is success!"); }else{ System.out.println("result is fail!"); for(String error : errorInfo){ error=error.replaceAll(“小于”,"<").replaceAll(“小于或等于”,"<=").replaceAll("大于",">"); System.out.println(error); } }
相关推荐
该书详细介绍了2006年时的脚本技术,涵盖多种脚本语言及其在IT领域的应用。CHM文件是一种常见于Windows平台的电子文档格式,它将HTML页面、图像和其他资源打包成单一的可执行文件,方便用户离线阅读和搜索。 在脚本...
QLExpress脚本引擎被广泛应用在阿里的电商业务场景,具有以下的一些特性: 1、线程安全,引擎运算过程中的产生的临时变量都是threadlocal类型。 2、高效执行,比较耗时的脚本编译过程可以缓存在本地机器,运行时的...
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
简单明了的shell脚本语言讲义,让你轻松了解shell语言。
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
这篇文档将深入探讨网络脚本语言JavaScript在构建小型网站中的应用,主要基于提供的"网络脚本语言-js作业-小网站源代码+报告"资源。JavaScript,通常简称为JS,是一种广泛用于网页和网络应用的解释型编程语言。它在...
obs-文本-脚本 date-and-time.lua
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
BAT批处理脚本-WinXP相关批处理-12个 BAT批处理脚本-加密解密-22个 BAT批处理脚本-实用的批处理文件-70个 BAT批处理脚本-提示窗口进度条-17个 BAT批处理脚本-数值计算-23个 BAT批处理脚本-文件相关操作-92个 BAT...
使用这些脚本,可以提升Java应用的管理和维护能力,让开发者更专注于业务逻辑,而不是基础运维问题。 在实际应用中,可以通过命令行调用这些脚本,结合其他Linux工具(如grep、awk等)进行进一步的数据分析和处理。...
idea 重置试用期脚本 ide-eval-resetter 1. 下载下来,解压 2. idea 点击试用并随便创建一个项目 3. 将ide-eval-resetter.zip压缩包直接拖进idea编辑器中
总之,这个压缩包“游戏脚本-虚空掠夺者-卡兹克1.zip”中包含了游戏开发的核心部分,即通过脚本语言构建的角色行为逻辑,它直接影响到玩家的游戏体验和角色的互动性。理解和掌握游戏脚本语言对于想要涉足游戏开发的...
总的来说,"游戏脚本-猩红收割者-弗拉基米尔2.zip"包含的是游戏中的角色逻辑,通过对这个脚本的解析和修改,开发者可以丰富游戏内容,提升玩家体验。理解并掌握脚本语言对于游戏开发和调试至关重要,因为它让开发者...
总的来说,“游戏脚本-虚空掠夺者-卡兹克3.zip”这个压缩包揭示了游戏开发中的一个重要方面——通过脚本语言来实现游戏逻辑。通过解析和理解这些脚本,开发者能够了解到游戏如何通过代码来实现角色的动态行为,以及...
总结来说,"游戏脚本-未来守护者-杰斯2.zip"这个压缩包包含的是《未来守护者》游戏中关于杰斯角色的脚本文件,涉及到角色行为逻辑、技能系统、AI算法等多个方面。通过这些脚本,开发者可以精确控制角色的每一个细节...
总之,"游戏脚本-放逐之刃-锐雯1.zip" 文件包含的是与游戏内角色锐雯相关的行为逻辑和控制代码,通过分析和修改这些脚本,开发者可以调整角色的性能、技能效果,甚至创建新的游戏体验。在游戏开发过程中,脚本的精细...