更新功能如何在drools中工作?

更新功能如何在drools中工作?,drools,Drools,更新功能如何在drools中工作?它是否会导致相同的规则再次自动触发 我认为您需要阅读手册: 使用update可使规则引擎意识到事实已被修改。因此,必须重新评估依赖于该事实的规则。这确实产生了一种效果,即一条规则可能会在一个无休止的循环中触发。例如,给定以下DRL,您将看到“无限循环”规则将持续激活: declare AreWeThereYet answer : boolean end rule "Are we there yet?" when not AreWeThereYe

更新功能如何在drools中工作?它是否会导致相同的规则再次自动触发

我认为您需要阅读手册:

使用
update
可使规则引擎意识到事实已被修改。因此,必须重新评估依赖于该事实的规则。这确实产生了一种效果,即一条规则可能会在一个无休止的循环中触发。例如,给定以下DRL,您将看到“无限循环”规则将持续激活:

declare AreWeThereYet
    answer : boolean
end

rule "Are we there yet?"
when
    not AreWeThereYet()
then
    insert(new AreWeThereYet());
end

rule "Infinite loop"
    no-loop
when
    $question: AreWeThereYet()
then
    $question.setAnswer(false);
    update($question);
end
这是因为规则引擎已被
更新($question)
指示,
$question
已更改,需要重新评估

不过,有一些方法可以防止这种情况。只需将
no loop
放在规则名称和
when
之间的一行,以防止规则因其自身后果而重新激活。另一个可以控制这一点的规则属性是
lock on active