LHS简介

在规则文件组成章节,我们已经了解了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

其中前缀$只是一个约定标识,有助于在复杂的规则中轻松区分变量和字段,但并不强制要求必须添加此前缀。

												

【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.4 LHS简介&Pattern的更多相关文章

  1. 《Drools7.0.0.Final规则引擎教程》第4章 4.4 LHS简介&Pattern

    LHS简介 在规则文件组成章节,我们已经了解了LHS的基本使用说明.LHS是规则条件部分的统称,由0个或多个条件元素组成.前面我们已经提到,如果没有条件元素那么默认就是true. 没有条件元素,官方示 ...

  2. 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.1 规则文件

    转载至:https://blog.csdn.net/wo541075754/article/details/75150267 一个标准的规则文件的格式为已“.drl”结尾的文本文件,因此可以通过记事本 ...

  3. 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.5RHS语法

    转载至:https://blog.csdn.net/wo541075754/article/details/76651073 RHS语法 使用说明 RHS是满足LHS条件之后进行后续处理部分的统称,该 ...

  4. 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.2 no-loop

    转载至:https://blog.csdn.net/wo541075754/article/details/75201934 no-loop 定义当前的规则是否不允许多次循环执行,默认是 false, ...

  5. 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.2 agenda-group

    转载:https://blog.csdn.net/wo541075754/article/details/75332720 agenda-group 规则的调用与执行是通过StatelessKieSe ...

  6. 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第3章 3.2 KIE概念&FACT对象

    转载:https://blog.csdn.net/wo541075754/article/details/74943236 3.2.1 什么是KIE KIE(Knowledge Is Everythi ...

  7. 【java规则引擎】《Drools7.0.0.Final规则引擎教程》第4章 4.2 auto-focus

    转载至:https://blog.csdn.net/wo541075754/article/details/75349556 auto-focus 在agenda-group章节,我们知道想要让Age ...

  8. 《Drools7.0.0.Final规则引擎教程》第2章 追溯Drools5的使用

    2.1 Drools5简述 上面已经提到Drools是通过规则编译.规则收集和规则的执行来实现具体功能的.Drools5提供了以下主要实现API: KnowledgeBuilder Knowledge ...

  9. 《Drools7.0.0.Final规则引擎教程》Springboot+规则重新加载

    在<Drools7.0.0.Final规则引擎教程>之Springboot集成中介绍了怎样将Drools与Springboot进行集成,本篇博客介绍一下集成之后,如何实现从数据库读取规则并 ...

随机推荐

  1. asp.net一般处理程序利用反射定位方法

    asp.net的一般处理程序我想大家用得都不少,经常会如下如下的代码: using System; using System.Collections.Generic; using System.Lin ...

  2. Linux下搜索文件

    使用linux系统难免会忘记文件所在的位置,可以使用以下命令对系统中的文件进行搜索.搜索文件的命令为"find":"locate":"whereis& ...

  3. Confluence 6 使用 LDAP 授权连接一个内部目录 - Schema 设置

    基本 DN(Base DN) 根专有名称(DN),这个名称在你对目录服务器上进行查询的时候使用.例如: o=example,c=com cn=users,dc=ad,dc=example,dc=com ...

  4. Confluence 连接到一 LDAP 目录,权限对本地用户组设置为只读

    https://www.cwiki.us/display/CONFLUENCEWIKI/Connecting+to+an+LDAP+Directory

  5. Sasha and Interesting Fact from Graph Theory CodeForces - 1109D (图论,计数,Caylay定理)

    大意: 求a->b最短路长度为m的n节点树的个数, 边权全部不超过m 枚举$a$与$b$之间的边数, 再由拓展$Caylay$定理分配其余结点 拓展$Caylay$定理 $n$个有标号节点生成k ...

  6. hdu-2227-dp+bit

    Find the nondecreasing subsequences Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/3 ...

  7. hdu 1258

    Sum It Up Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

  8. Python的数据类型2列表

    Python的数值类型List,也就是列表 Python的列表比较类似与其他语言的数组概念,但他又与其他语言数组的概念有很大的不同 C语言.Java的数组定义是这样的,存储多个同类型的数值的集合就叫数 ...

  9. openSUSE 12.3 默认启动项

    修改默认opensuse12.3的默认启动项目(grub2). vim /boot/grub2/grubenv 里面有一条: saved_entry=openSUSE 12.3 修改为saved_en ...

  10. myeclipse设置jvm参数的三种方式

    方法一: 打开eclipse,选择Window--Preferences...在对话框左边的树上双击Java,再双击Installed JREs,在右边选择前面有对勾的JRE,再单击右边的“Edit” ...