(注:相关代码请参考 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...
obs-文本-脚本 date-and-time.lua
使用这些脚本,可以提升Java应用的管理和维护能力,让开发者更专注于业务逻辑,而不是基础运维问题。 在实际应用中,可以通过命令行调用这些脚本,结合其他Linux工具(如grep、awk等)进行进一步的数据分析和处理。...
总之,"游戏脚本-放逐之刃-锐雯1.zip" 文件包含的是与游戏内角色锐雯相关的行为逻辑和控制代码,通过分析和修改这些脚本,开发者可以调整角色的性能、技能效果,甚至创建新的游戏体验。在游戏开发过程中,脚本的精细...
总之,这个压缩包“游戏脚本-虚空掠夺者-卡兹克1.zip”中包含了游戏开发的核心部分,即通过脚本语言构建的角色行为逻辑,它直接影响到玩家的游戏体验和角色的互动性。理解和掌握游戏脚本语言对于想要涉足游戏开发的...
本文将深入探讨“游戏脚本-众星之子-索拉卡.zip”这一主题,揭示其中蕴含的技术知识。 “众星之子-索拉卡”可能是指一款游戏中的一位角色或游戏角色的昵称,而“索拉卡”在游戏中通常是一个具有治疗能力的辅助角色...
总的来说,"游戏脚本-猩红收割者-弗拉基米尔2.zip"包含的是游戏中的角色逻辑,通过对这个脚本的解析和修改,开发者可以丰富游戏内容,提升玩家体验。理解并掌握脚本语言对于游戏开发和调试至关重要,因为它让开发者...
总的来说,“游戏脚本-虚空掠夺者-卡兹克3.zip”这个压缩包揭示了游戏开发中的一个重要方面——通过脚本语言来实现游戏逻辑。通过解析和理解这些脚本,开发者能够了解到游戏如何通过代码来实现角色的动态行为,以及...
总结来说,"游戏脚本-未来守护者-杰斯2.zip"这个压缩包包含的是《未来守护者》游戏中关于杰斯角色的脚本文件,涉及到角色行为逻辑、技能系统、AI算法等多个方面。通过这些脚本,开发者可以精确控制角色的每一个细节...
综上所述,PRO-FACE脚本编程是一门综合性的技术,它结合了人机界面的交互设计和脚本语言的逻辑控制,对于实现自动化控制和人机交互体验的提升有着重要的作用。通过理解和掌握这些知识点,能够有效提升PRO-FACE人机...
总之,"游戏脚本-邪恶小法师-维迦2.zip"是一个包含了游戏内角色行为逻辑的脚本文件集合,通过深入理解和编辑这些脚本,开发者和玩家可以更好地定制游戏体验,创造出独特的游戏玩法。对于想要了解或涉足游戏开发的人...
此外,随着数据库技术的发展,商城模块的数据库脚本也可能融入新的技术特性,如使用NoSQL数据库、全文搜索引擎、大数据分析等技术来提升系统的功能和性能。 芋道sql ruoyi-vue-pro yudao项目商城模块相关的SQL脚本...
使用/ dev / usb / lp0设备句柄) 声称支持以下打印机(✓表示经过作者或贡献者验证的打印机): QL-500(✓),QL-550(✓),QL-560(✓),QL-570(✓),QL-580N,QL-650TD,QL-700(✓),QL-710W(✓), QL-...
仅供学习。勿用商业。谢谢合作。漏洞验证脚本ssl-deacth-alert(cve-2016-8610)
Linux 内核CVE-2024-1086漏洞复现脚本。 在普通用户下,将文件上传后,chmod 777 exploit ,然后运行 ./exploit ,提权成功,输入id,可看到已经是root权限 。
**批处理**(Batch Scripting),是一种计算机编程语言,它允许用户创建一系列预定义命令的脚本文件,以实现自动化任务的执行。在Windows操作系统中,这种脚本通常被称为**批处理脚本**,其文件扩展名为`.bat`或`....