我最近开始使用 Drools,在编写 drl 文件时遇到了这个问题。我正在创建一个“Person”类对象的列表并将这个列表传递给一个 .drl 文件。现在我想迭代列表以检查“薪水”大于某个值的人员(Person 类的对象)。但是由于将集合放在工作内存中是一种不好的做法,那么不这样做是否可以进行迭代?
问问题
1874 次
1 回答
2
迭代是 Drools 规则所固有的。这是命令式语言中的规则和 if 语句之间的区别之一。该规则将针对您工作记忆中存在的每个对象(这不是 100% 准确;Drools 比这更聪明)进行评估。
因此,如果您在会话中将每个 people 对象作为事实插入,则只需有 1 条规则即可执行您需要的操作:
rule 'Check Person Salary'
when
$p: Person(salary > 1000)
then
//do whatever you want with $p
end
每次插入 Person 对象时,都会为它评估规则。如果对象通过评估,将生成该规则的新激活。当您调用 fireAllRules() 时,所有激活都将被执行:您激活的规则的 RHS 将被执行。当然,这是对 Drools 和 RETE 算法如何工作的粗略解释。有关更精确的信息,请参阅 Drools 文档。
希望能帮助到你,
于 2013-04-26T11:26:49.287 回答