Drools语法-条件部分(一)

一、Drools基础语法

规则文件的构成

drl是Drools Rule Language的缩写。在规则文件中编写具体的规则内容。

一套完整的规则文件内容构成如下:

  • package:包名,package对应的不一定是真正的目录,可以任意写com.abc,同一个包下的drl文件可以相互访问
  • import:用于导入类或者静态方法
  • global:全局变量
  • function:自定义函数
  • query:查询
  • rule end:规则体

规则体语法结构

一个规则通常包括三个部分:属性部分(attribute) 、条件部分(LHS)和结果部分(RHS)

rule "ruleName"        //rule关键字,表示规则开始,参数为规则的唯一名称
    attributes         //规则属性,是rule与when之间的参数,为可选项
    when               //关键字,后面是规则的条件部分
        LHS            //Left Hand Side,是规则的条件部分
    then               //后面跟规则的结果部分
        RHS            //是规则的结果或行为
end                    //表示一个规则的结束  

条件部分

LHS(Left Hand Side):是规则的条件部分的通用名称。它由零个或多个条件元素组成。如果LHS为空,则它将被视为始终为true的条件元素。 (左手边)

LHS部分由一个或者多个条件组成,条件又称为pattern。

pattern的语法结构为:绑定变量名:Object(Field约束)

其中绑定变量名可以省略,通常绑定变量名的命名一般建议以$开始。如果定义了绑定变量名,就可以在规则体的RHS部分使用此绑定变量名来操作相应的Fact对象。Field约束部分是需要返回true或者false的0个或多个表达式。

//规则1:100元以下, 不加分
rule "score_1"
    when
    		//工作内存中必须存在Order这种类型的Fact对象-----类型约束
        //Fact对象的amout属性值必须小于等于100------属性约束
        $s : Order(amout <= 100)
    then
        $s.setScore(0);
        System.out.println("成功匹配到规则1:100元以下, 不加分 ");
end

如果 LHS 部分为空的话,那么引擎会自动添加一个 eval(true)的条件,由于该条件总是返回 true,所以 LHS 为空的规则总是返回 true

1.约束连接
在 LHS 当中,可以包含 0~n 个条件,多个pattern之间可以采⽤“&&” (and) 、 “||”(or)和“,”(and)
来实现,也可以不写,默认连接为and。

//规则2:100元-500元 加100分
rule "score_2"
when
$s : Order(amout > 100 && amout <= 500)
then
$s.setScore(100);
System.out.println("成功匹配到规则2:100元-500元 加100分 ");
end
12345678

2.⽐较操作符
在 Drools当中共提供了⼗⼆种类型的⽐较操作符, 分别是: >、 >=、 <、 <=、 = =、 !=、
contains、 not contains、memberof、not memberof、matches、not matches;在这⼗⼆种类型的⽐较操作符当中,前六个是⽐较常⻅也是⽤的⽐较多的⽐较操作符

符号说明
>⼤于
<⼩于
>=⼤于等于
<=⼩于等于
==等于
!=不等于
contains检查⼀个Fact对象的某个属性值是否包含⼀个指定的对象值
not contains检查⼀个Fact对象的某个属性值是否不包含⼀个指定的对象值
memberOf判断⼀个Fact对象的某个属性是否在⼀个或多个集合中,如果是字符串判断的标准就变为:该字符串是否包含Fact对象的字段内容了。当然这个过程并不会神奇的转换成数组什么的,仅仅类似于Java中String提供的contains方法的比较。
not memberOf判断⼀个Fact对象的某个属性是否不在⼀个或多个集合中
matches判断⼀个Fact对象的属性是否与提供的标准的Java正则表达式进⾏匹配
not matches判断⼀个Fact对象的属性是否不与提供的标准的Java正则表达式进⾏匹配

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值