0

我最近开始使用 Drools,在编写 drl 文件时遇到了这个问题。我正在创建一个“Person”类对象的列表并将这个列表传递给一个 .drl 文件。现在我想迭代列表以检查“薪水”大于某个值的人员(Person 类的对象)。但是由于将集合放在工作内存中是一种不好的做法,那么不这样做是否可以进行迭代?

4

1 回答 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 回答