规则代码
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都不会输出