前面我们已经知道了在规则体中的LHS部分是介于when和then之间的部分,主要用于模式匹配,只有匹配结果为true时,才会触发RHS部分的执行。下面我们会针对LHS部分学习几个新的用法。

目录

复合值限制in/not in

条件元素eval

条件元素not

条件元素exists

规则继承

复合值限制in/not in

复合值限制是指超过一种匹配值的限制条件,类似于SQL语句中的in关键字。Drools规则体中的LHS部分可以使用in或者not in进行复合值的匹配。具体语法结构如下:

Object(field in (比较值1,比较值2...))

举例:

$s:Student(name in ("张三","李四","王五"))
$s:Student(name not in ("张三","李四","王五"))

条件元素eval

eval用于规则体的LHS部分,并返回一个Boolean类型的值。语法结构如下:

eval(表达式)

举例:

eval(true)
eval(false)
eval(1 == 1)

条件元素not

not用于判断Working Memory中是否存在某个Fact对象,如果不存在则返回true,如果存在则返回  false。语法结构如下:

not Object(可选属性约束)

举例:

not Student()
not Student(age < 10)

条件元素exists

exists的作用与not相反,用于判断Working Memory中是否存在某个Fact对象,如果存在则返回true,不存在则返回false。语法结构如下:

exists Object(可选属性约束)

举例:

exists Student()
exists Student(age < 10 && name != null)

可能有人会有疑问,我们前面在LHS部分进行条件编写时并没有使用exists也可以达到判断Working Memory中是否存在某个符合条件的Fact元素的目的,那么我们使用exists还有什么意义?

两者的区别:当向Working Memory中加入多个满足条件的Fact对象时,使用了exists的规则执行一次,不使用exists的规则会执行多次。

例如:

规则文件(只有规则体):rule "使用exists的规则"whenexists Student()thenSystem.out.println("规则:使用exists的规则触发");
end
​
rule "没有使用exists的规则"whenStudent()thenSystem.out.println("规则:没有使用exists的规则触发");
end

测试:

kieSession.insert(new Student());
kieSession.insert(new Student());
kieSession.fireAllRules();

上面第一个规则只会执行一次,因为Working Memory中存在两个满足条件的Fact对象,第二个规则会执行两次。

规则继承

规则之间可以使用extends关键字进行规则条件部分的继承,类似于java类之间的继承。

例如:rule "rule_1"whenStudent(age > 10)thenSystem.out.println("规则:rule_1触发");
end
​
rule "rule_2" extends "rule_1" //继承上面的规则when/*此处的条件虽然只写了一个,但是从上面的规则继承了一个条件,所以当前规则存在两个条件,即Student(age < 20)和Student(age > 10)*/Student(age < 20) thenSystem.out.println("规则:rule_2触发");
end

规则引擎Drools使用 第十一篇 Drools 的高级语法之LHS增强相关推荐

  1. 规则引擎Drools使用 第四篇Drools基础语法

    前面介绍了Drools规则引擎,并讲解了一个编写drl文件的Demo,学习了Drools加载规则文件到规则引擎,注入Fact参数并触发规则的流程.本篇主要介绍Drool规则文件的构成,组成规则文件一些 ...

  2. 规则引擎Drools使用 第七篇 Drools 常见的属性

    Drools的一些属性 Drools中提供的属性如下表(部分属性): 接下来分别写一些demo介绍下这些属性的使用. salience属性 salience属性用于指定规则的执行优先级,取值类型为In ...

  3. 《Drools7.0.0.Final规则引擎教程》第1章 Drools简介

    1.1 什么是规则引擎 规则引擎是由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.接受数据输入,解释业务规则,并根据业务 ...

  4. “睡服”面试官系列第二十一篇之class基本语法(建议收藏学习)

    目录 1. 简介 2. 严格模式 3. constructor 方法 4. 类的实例对象 5. Class 表达式 6. 不存在变量提升 7. 私有方法 8. 私有属性 9. this 的指向 10. ...

  5. JavaScript小白入门篇(二、高级语法之 BOM 详解)

  6. mysql 规则引擎_Drools规则引擎详解-常用的drl实例

    package droolsDemo //说明:每个 drl 都必须声明一个包名,这个包名与 Java 里面的不同,它不需要与文件夹的层次结构一致, //主要用于可以根据kmodule.xml中不同的 ...

  7. drools规则引擎的基本使用和原理介绍

    理论基石 借用:<drools规则引擎技术指南>来说, drools是: 开源项目,规则引擎技术,规则语法形成的规则文件,可以存在数据库等,通过drools包提供的接口,调用生成对应的结果 ...

  8. 【转】什么是规则引擎(Drools、OpenL Tablets、Easy Rules、RuleBook)

    什么是规则引擎(Drools.OpenL Tablets.Easy Rules.RuleBook) 发表于:2021年1月23日 分类:Drools, 规则引擎 标签:Drools, Easy-Rul ...

  9. 规则引擎Drools在贷后催收业务中的应用

    作者:vivo 互联网服务器团队- Feng Xiang 在日常业务开发工作中我们经常会遇到一些根据业务规则做决策的场景.为了让开发人员从大量的规则代码的开发维护中释放出来,把规则的维护和生成交由业务 ...

  10. drools规则引擎 java_Drools规则引擎的使用总结

    前一段时间在开发了一个做文本分析的项目.在项目技术选型的过程中,尝试使用了Drools规则引擎.让它来作为项目中有关模式分析和关键词匹配的任务.但后来,因为某种原因,还是撇开了Drools.现将这个过 ...

最新文章

  1. lvm 逻辑卷 和 网络管理
  2. mysql读取sql脚本_Pandas直接读取sql脚本的方法
  3. Java中对象的储存区
  4. 编程实现 4 条重写规则,可生成半法式和法式
  5. 聚类算法-最大最小距离算法(实例+代码)
  6. 双系统Ubuntu无法访问windows磁盘分区解决方法
  7. android: a system image must be selected to continmue
  8. 【Python】Python实战从入门到精通之三 -- 教你使用Python中条件语句
  9. 了解MySQL的隐式转化
  10. IntelliJ 平台 2020 年路线图,规划原来这么厉害
  11. 第1章 异常产生异常处理
  12. L2-006 树的遍历 (25 point(s))
  13. NLP之电影评分数据的情感分析
  14. 用tensorflow实现矩阵分解
  15. 利用函数imnoise2处理噪声污染和spfilt处理滤波器
  16. 土是独体字结构吗_独体结构的字大全
  17. Security Processor 周边
  18. Nginx的超时keeplive_timeout配置详解
  19. java 设置纸张大小设置_java 用itext设置pdf纸张大小操作
  20. 稿费计算机在线,稿酬个税计算器2017年.doc

热门文章

  1. php风格模板,phpwind冷色调整站风格模板
  2. 青箬笠,绿蓑衣,斜风细雨不须归
  3. 基于Java(SSM)+MySQL的二手书籍交易系统【100010084】
  4. go html桌面,用 Go 开发桌面应用程序(GUI):Webview、Lorca 与 Electron
  5. 九爷带你了解 2017年3-4月企业面试题总结
  6. 开发者投稿—百度大脑新品体验之肤色检测
  7. 一个好用的剪切板复制粘贴工具
  8. 互联网B端产品设计经验总结
  9. 有关R星游戏(尤其是荒野大镖客玩家)二次验证码/两步验证/谷歌验证绑定相关问题
  10. WINRAR5.0破解