《Drools7.0.0.Final规则引擎教程》LHS简介&Pattern详解编程语言
在规则文件组成章节,我们已经了解了LHS的基本使用说明。LHS是规则条件部分的统称,由0个或多个条件元素组成。前面我们已经提到,如果没有条件元素那么默认就是true。
没有条件元素,官方示例:
rule no CEs when // empty then ... // actions (executed once) end // The above rule is internally rewritten as: rule eval(true) when eval( true ) then ... // actions (executed once) end
如果有多条规则元素,默认它们之间是“和”的关系,也就是说必须同时满足所有的条件元素才会触发规则。官方示例:
rule 2 unconnected patterns when Pattern1() Pattern2() then ... // actions end // The above rule is internally rewritten as: rule 2 and connected patterns when Pattern1() and Pattern2() then ... // actions end
和“or”不一样,“and”不具有优先绑定的功能。因为生命一次只能绑定一个FACT对象,而当使用and时就无法确定声明的变量绑定到哪个对象上了。以下代码会编译出错。
person : (Person( name == Romeo ) and Person( name == Juliet ))Pattern (条件元素)
Pattern元素是最重要的一个条件元素,它可以匹配到插入working memory中的每个FACT对象。一个Pattern包含0到多个约束条件,同时可以选择性的进行绑定。
通过上图可以明确的知道Pattern的使用方式,左边变量定义,然后用冒号分割。右边pattern对象的类型也就是FACT对象,后面可以在括号内添加多个约束条件。最简单的一种形式就是,只有FACT对象,没有约束条件,这样一个pattern配到指定的patternType类即可。
比如,下面的pattern定义表示匹配Working Memory中所有的Person对象。
Person()
pattemType并不需要使用实际存在的FACT类,比如下面的定义表示匹配Working Memory中所有的对象。很明显,Object是所有类的父类。
Object() // 匹配working memory中的所有对象
如下面的示例,括号内的表达式决定了当前条件是否会被匹配到,这也是实际应用中最常见的使用方法。
Person( age == 100 )
Pattern绑定:当匹配到对象时,可以将FACT对象绑定到指定的变量上。这里的用法类似于java的变量定义。绑定之后,在后面就可以直接使用此变量。
rule ... when $p : Person() then System.out.println( Person + $p ); end
其中前缀$只是一个约定标识,有助于在复杂的规则中轻松区分变量和字段,但并不强制要求必须添加此前缀。
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/15199.html
cjavaxml相关文章
- 一文吃透AQS&ReentrantLock的前世与今生
- 在Unix & Linux 平台安装 Python环境教程
- Spring Security 系列(3) —— Spring Security & Webflux
- 单调队列java_单调队列&单调栈
- APP性能测试方法&工具
- 总投资3万亿卢比,SRAM&MRAM集团宣布在印度投建半导体工厂
- 性能测试(第1集)第6讲:二分法和黄金分割法寻找拐点的方法&全链路压测
- 接口测试|HttpRunner模拟发送GET请求&自动生成测试报告
- 生成式预训练Transformer的演化预测(GPT-4 & 5)
- IK&N内部密码学练习(1)
- 开心档之C++ 类 & 对象
- Google 发布 Android 6.0 SDK & Android M 开发者预览最终版
- 串MySQL处理字符串的最佳实践(mysql & 字符)
- AMP MySQL升级提升数据库性能的必要之举(amp mysql升级)
- 如何增加Oracle数据库的AMP值(amp值oracle)
- AMP与Oracle结合提升数据库性能($amp oracle)
- 聊天室php&mysql(六)
- 学习YUI.Ext第七日-View&JSONViewPartTwo-一个画室网站的案例