Drools属性解释

时间:2014-12-28 13:03:39

标签: drools

我有一个关于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

如果没有“无循环”,为什么会导致无限循环?

1 个答案:

答案 0 :(得分:2)

重新突显:逻辑总是胜过显着。如果Message.status最初设置为Message.HELLO,则另一个规则不符合条件且执行"Hello World"

重新循环:修改/更新只是意味着就修改的事实而言,重新评估所有内容都是从头开始的。因此,帐户已更新,返回到第一个,重新评估会创建另一个激活此简单匹配规则。