规则引擎Drools example3说明

本文通过一个具体的规则引擎示例,详细解释了规则如何在工作内存中匹配并执行的过程,特别是当规则执行导致数据变化时如何重新评估条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

规则代码

package org.drools.examples.banking
 
rule "Rule 01"   
    when
        $number : Number( )
        not Number( intValue < $number.intValue )
    then
        System.out.println("Number found with value: " + $number.intValue() ); 
        delete( $number );
end 

说明

  • Working mem 内存中会插入有5个Number对象分别是 3 1 4 1 5 $number : Number( )会执行5次
  • 第一次 $number = Number(intValue=3) 并且内存中不存在Number(intValue<3),存在1,所以不输出
  • 第二次,$number = Number(intValue=1) 并且 内存中不存在Number(intValue<1),不存在,所以输出-并且删除1, // 此时Working mem 内存改变,导致所有数据重新执行规则,现在有3,4,1,5
  • 第三次 $number = Number(intValue=3) 并且内存中不存在Number(intValue<3),存在1,所以不输出
  • 第四次,$number =Number(intValue=4) 并且 内存中不存在Number(intValue<4),存在1,所以不输出
  • 第五次,$number = Number(intValue=1) 并且内存中不存在Number(intValue<1),不存在,所以输出-并且删除1 // 此时Working mem 内存改变,导致所有数据重新执行规则,现在只有3,4,5
  • 第六次,$number = Number(intValue=3) 并且内存中不存在Number(intValue<3),不存在,所以输出-并且删除3
  • 第七次,$number =Number(intValue=4) 并且 内存中不存在Number(intValue<4),不存在,所以输出-并且删除4
  • 第八次,$number = Number(intValue=4) 并且内存中不存在Number(intValue<4),不存在,所以输出-并且删除5

注意

注意:如果去掉 delete( $number );只会输出两个1。因为3是执行过的不会重新执行,执行4,5的时候,有3驻留在内存中,4,5都不会输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值