0

当包含此规则以供运行时,我想在 then 部分中动态插入对象列表。

rule "insert adresses"
  when
  $person:Person(state=="DC")
   then
       //insert all address of this person, person.getAddresses() return a set of Address
4

2 回答 2

5

2种可能的方式:

rule "insert adresses"
when
  $person: Person(state=="DC")
  $a: Address() from $person.getAddresses()
then
  insert($a);
end

rule "insert adresses"
when
  $person: Person(state=="DC")
then
  for (Address a : $person.getAddresses()){
    insert(a);
  }
end

两条规则具有相同的结果。如果您想向要插入的地址添加一些过滤器,那么选项一可能会更好。

希望能帮助到你,

于 2013-09-19T09:33:53.467 回答
1

事实上,我认为存在一些差异。在选项 1 中,每个地址将有一个激活和触发。在选项 2 中,每人只有一次激活和开火。确实,使用第二个选项您无法以一种很好的方式过滤地址,但您肯定会减少触发次数。这完全取决于您想对地址做什么以及您是否关心解雇。

于 2013-09-19T19:30:15.783 回答