欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

规则引擎Drools example3说明

程序员文章站 2022-05-28 12:23:56
...

规则代码

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都不会输出