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