python 规则引擎 drools_Drools规则引擎详解-常用的drl实例
关于Drools规则引擎,之前已经写了几篇相关文章,如果大家不熟悉的可以移步了解下:
本篇博客主要为大家列举一些常用,简单的drl文件,帮助大家更加深入地了解其drl文件地编写格式及常用的操作符
说明:每个 drl 都必须声明一个包名,这个包名与 Java 里面的不同,它不需要与文件夹的层次结构一致,
主要用于可以根据kmodule.xml中不同的package属性来指定加载哪个.drl文件,
packages="org.some.pkg"表示ksession2只会加载org.some.pkg下的规则文件,如果没写,则默认加载所有的规则文件。
关于kmodule.xml的更多详情,可以参考:Drools规则引擎详解-语法及组件
package droolsDemo
导入实体类,规则判断都是通过实体类的属性来进行比较的
import com.rulesengine.drools.User
import com.rulesengine.drools.Pet
import com.rulesengine.drools.Dog
import com.rulesengine.drools.BoolTest
每一条规则都有一个唯一的名字,必须有,如果有重名,会在引擎加载drl文件中报错。
rule "multiple condition"
salience值越大越先匹配,还有其他的属性设置能够帮助我们实现不同的需求,比如 分组,过期设置,是否循环等等。可以参考:Drools规则引擎详解-语法及组件
salience 1
when
//多个条件测试:user中age在15-30 60-90之间并且 根据user的pet属性的color来处理不同的逻辑,
$user : User((age>15 && age<30)||(age>60 && age<90))
$pet : Pet() from $user.pet
if($pet.getColor()=="black") do[black]
// do 关键结束后,后续逻辑继续,break 关键字结束后结束程序
if($pet.getColor()=="white") break[white]
then
System.out.print("测试结束");
then [black]
System.out.println("pet color is balck");
then [white]
System.out.print("pet color is white");
end
字符串的比较可以用 == 代替 equals方法,十分方便,$pet是Pet类的一个引用。
rule "String test"
when
$pet : Pet(name=="cat")
then
System.out.println("宠物名称符合条件");
end
当然,下面的例子表明,即使 User类的age 字段是Integer 类型,同样也可以用 > , ==,
rule "string compare"
salience -20
when
/*字符串的数字也是可以比较的*/
$user : User((age>"15" && age"60"))
then
System.out.println("我的优先级是 -20");
//此规则匹配后不再匹配其他规则
drools.halt();
end
下面的这个规则同样很有意思,可以用BigInteger来解决大数(超过64位)的比较,支持直接用>=, == ,=< 符号直接比较,十分方便 ,开发中可以用来解决IPv6 的比较
rule "BigInteger test"
salience 20
when
$dog : Dog(age=="21262780079976241822035969236715638783")
then
System.out.println("我等于21262780079976241822035969236715638783");
end
boolean类型的比较value=="true"或者value==true都是支持的
rule "test bool "
salience 100
when
//即使value为boolean类型,也可以这样比较
$bool : BoolTest(value=="true")
then
System.out.println("I am true");
end
contains 以及not contains 可以测试集合中是否包含某个对象
rule "test contains and not contains"
salience 200
when
$user : User(set contains "360")
then
System.out.println("测试表明包含 360");
end
测试not in 年龄不在15-30 60-90 之间的符合,注意数字加不加引号都可以
rule "test not in"
salience 100
when
$user : User(!((age>15 && age<30)||(age>60 && age<90)))
then
System.out.print("age不在 15-30,60-90之间");
end
总结一下,个人觉得drools最为强大的一点是,无论是Integer,Boolean,BigInteger,String这几种类型都是支持> ,< ,==这种简单的操作符号的,开发中十分方便,不用管bean中的属性的具体类型,统统都可以在字符上加上引号,不用区别对待,爽爽爽!!
python 规则引擎 drools_Drools规则引擎详解-常用的drl实例相关推荐
- mysql 规则引擎_Drools规则引擎详解-常用的drl实例
package droolsDemo //说明:每个 drl 都必须声明一个包名,这个包名与 Java 里面的不同,它不需要与文件夹的层次结构一致, //主要用于可以根据kmodule.xml中不同的 ...
- OCR引擎Tesseract以及pytesseract详解及实例
OCR引擎Tesseract以及pytesseract详解及实例 目录 OCR引擎Tesseract以及pytesseract详解及实例 谷歌开源OCR引擎Tesseract Tesseract的安装 ...
- 代码检查规则:Java语言案例详解
本节课程为<代码检查规则:Java语言案例详解>, 通常情况下Java的代码检查规则可以分为以下十类: 接下来,让我们具体来看看每个分类的内容. 一.源文件规范 该类规范主要从文件名.文件 ...
- ThinkPHP模版引擎之变量输出详解
ThinkPHP模版引擎之变量输出详解 使用ThinkPHP开发有一定时间了,今日对ThinkPHP的模板引擎变量解析深入了解了一下,做出一些总结,分享给大家供大家参考.具体分析如下: 我们已经知道了 ...
- [转]《战地3》寒霜2引擎渲染流程图文详解
一直一来受制于技术.预言和环境,中国国内玩家.开发者对于国外先进游戏引擎的渲染流程知之甚少,虽然没有技术封锁缺更似自我封锁,在GDC上很少看到中国开发者的身影,无法学习到先进的开发经验. 首先来回味一 ...
- python镜像下载包_python包详解
干货大礼包!21天带你轻松学Python(文末领取更多福利) 点击查看课程视频地址 本课程来自于千锋教育在阿里云开发者社区学习中心上线课程<Python入门2020最新大课>,主讲人姜伟. ...
- Python中数组切片的用法详解
Python中数组切片的用法详解 一.python中"::-1"代表什么? 二.python中":"的用法 三.python中数组切片 三.numpy中的整数数 ...
- 21年最新Python面试题及答案汇总详解(上)
错过三月找工作的机会,还要错过四月的好时期吗?Python面试你做准备了吗?下面小编整理了一套2021年最新Python常见面试题目,及Python面试题目答案汇总.希望能够帮助到大家. 21年最新P ...
- python popen阻塞_对Python subprocess.Popen子进程管道阻塞详解
问题产生描述 使用子进程处理一个大的日志文件,并对文件进行分析查询,需要等待子进程执行的输出结果,进行下一步处理. 出问题的代码 # 启用子进程执行外部shell命令 def __subprocess ...
最新文章
- 程序员又背锅?美团外卖声明“杀熟会员”是技术原因,软件定位缓存导致配送费不准!网友:程序员太惨!...
- leetcode算法题--在排序数组中查找数字 I
- 第九周项目实践2 二叉树遍历的递归算法
- PowerShell自动删除过期数据
- JVM详解之:java class文件的密码本
- RHEL 8 - 用podman compose替代docker compose运行Ansible Tower
- Android 虚线分割Shape
- Python基础——类(Class)
- 【面试题】百度糯米java工程师面试
- eclipse(window平台)快捷键总结
- python数据结构与算法 pdf_数据结构与算法:Python语言描述.pdf
- JavaWeb(二)框架搭建篇
- 利用go破解带密码的rar压缩文件
- windows打开cmd的几种方式
- Java关于Eclipse下载速度慢的解决办法!
- USACO-Fractions to Decimals
- B站小甲鱼Python基础学习课堂笔记
- Privacy Policy of Clone App
- [gdc13]古墓丽影DirectX11技术
- github使用教程linux,GitHub Linux下使用方法