【问题标题】:Drools attributes explanationsDrools 属性说明
【发布时间】:2014-12-28 21:30:27
【问题描述】:

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

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

【问题讨论】:

    标签: drools


    【解决方案1】:

    重显性:逻辑总是胜过显着性。如果 Message.status 最初设置为 Message.HELLO,则其他规则不符合条件并执行 "Hello World"

    无循环:修改/更新仅意味着就修改后的事实而言,对所有内容的重新评估从头开始。因此,帐户被更新,返回到第一个方格,重新评估创建了另一个激活这个平凡匹配规则。

    【讨论】:

      猜你喜欢
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多