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

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

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"))

1

Pattern (条件元素)

Pattern元素是最重要的一个条件元素,它可以匹配到插入working memory中的每个FACT对象。一个Pattern包含0到多个约束条件,同时可以选择性的进行绑定。


通过上图可以明确的知道Pattern的使用方式,左边变量定义,然后用冒号分割。右边pattern对象的类型也就是FACT对象,后面可以在括号内添加多个约束条件。最简单的一种形式就是,只有FACT对象,没有约束条件,这样一个pattern配到指定的patternType类即可。


比如,下面的pattern定义表示匹配Working Memory中所有的Person对象。


Person()

1

pattemType并不需要使用实际存在的FACT类,比如下面的定义表示匹配Working Memory中所有的对象。很明显,Object是所有类的父类。


Object() // 匹配working memory中的所有对象

1

如下面的示例,括号内的表达式决定了当前条件是否会被匹配到,这也是实际应用中最常见的使用方法。


Person( age == 100 )

1

Pattern绑定:当匹配到对象时,可以将FACT对象绑定到指定的变量上。这里的用法类似于java的变量定义。绑定之后,在后面就可以直接使用此变量。


rule ...

when

   $p : Person()

then

   System.out.println( "Person " + $p );

end


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


目录
相关文章
|
Web App开发 网络协议 关系型数据库
深度解析TCP协议:特点、应用场景及市面上常见软件案例
深度解析TCP协议:特点、应用场景及市面上常见软件案例
1418 1
深度解析TCP协议:特点、应用场景及市面上常见软件案例
|
Docker 容器
docker的导入本地镜像和导出本地镜像
本文介绍了如何使用Docker对本地镜像进行导入和导出操作,包括从本地导入`nginx.tar`镜像以及将`open-webui`镜像导出并压缩为`open-webui.tar.gz`。
1297 1
|
关系型数据库 MySQL 数据挖掘
Mysql与StarRocks语法上的不同
Mysql与StarRocks语法上的不同
|
机器学习/深度学习 数据可视化 算法
数据分享|R语言SVM支持向量机用大学生行为数据对助学金精准资助预测ROC可视化
数据分享|R语言SVM支持向量机用大学生行为数据对助学金精准资助预测ROC可视化
|
JavaScript Java 测试技术
基于springboot+vue.js的党员教育和管理系统附带文章和源代码设计说明文档ppt
基于springboot+vue.js的党员教育和管理系统附带文章和源代码设计说明文档ppt
101 0
一日一技:在ES中如何使用通配符搜索keyword字段
一日一技:在ES中如何使用通配符搜索keyword字段
458 0
最佳实践:IDC双专线静态路由冗余上云方案
通过介绍专线接入和云企业网组合应用的方式,提供客户IDC冗余链路专线接入静态路由配置的混合云解决方案。
4047 0
|
14天前
|
存储 弹性计算 人工智能
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾
2025年9月24日,阿里云弹性计算团队多位产品、技术专家及服务器团队技术专家共同在【2025云栖大会】现场带来了《通用计算产品发布与行业实践》的专场论坛,本论坛聚焦弹性计算多款通用算力产品发布。同时,ECS云服务器安全能力、资源售卖模式、计算AI助手等用户体验关键环节也宣布升级,让用云更简单、更智能。海尔三翼鸟云服务负责人刘建锋先生作为特邀嘉宾,莅临现场分享了关于阿里云ECS g9i推动AIoT平台的场景落地实践。
【2025云栖精华内容】 打造持续领先,全球覆盖的澎湃算力底座——通用计算产品发布与行业实践专场回顾