我有一个关于2个Drools属性的问题 - 显着性和无循环
显着性:
rule "Hello World"
salience -10
when
$m : Message( status == Message.HELLO, $myMessage : message )
then
System.out.println( $myMessage );
$m.setMessage( "Goodbye cruel world" );
$m.setStatus( Message.GOODBYE );
update( $m );
end
rule "GoodBye"
when
Message( status == Message.GOODBYE, $myMessage : message )
then
System.out.println( $myMessage );
end
我们应该期望首先触发“GoodBye”规则(因为它的显着性更高)然而这种情况不会发生,而“Hello World”规则首先会被激活,然后才会被激活“GoodBye”
无环:
我知道这个属性会阻止规则被执行到导致无限循环的相同事实。我的问题是关于这个属性的一个例子,我不太明白:
rule "interest calculation"
no-loop
when
$account : Account( )
then
modify($account) {
setBalance((long)($account.getBalance() * 1.03));
}
end
如果没有“无循环”,为什么会导致无限循环?
答案 0 :(得分:2)
重新突显:逻辑总是胜过显着。如果Message.status最初设置为Message.HELLO,则另一个规则不符合条件且执行"Hello World"
。
重新循环:修改/更新只是意味着就修改的事实而言,重新评估所有内容都是从头开始的。因此,帐户已更新,返回到第一个,重新评估会创建另一个激活此简单匹配规则。