Drools的:规则触发两次相同的情况下,

问题描述 投票:0回答:2

这条规则触发两次虽然只有一个匹配的情况。我使用Drools的6.5.0。最后。查看日志,它需要$卡2作为第二轮$卡1,反之亦然。

rule "Rule1"
salience 1
when
  $card1 : (used == false)
  $card2 : (used == false, number = $card1.number)
  exists Hand(name == name1)
  exists Hand(name == name2 || name == name3)
  not Hand(name == name4)

then
    $card1.setUsed(true); $card2.setUsed(true);
    insert(new Hand(name1, $card1, $card2));

end
java drools rule-engine
2个回答
0
投票

首先,你的规则看起来畸形给我。 2.第一图案缺少它们的类型和存在变数(即name1)没有来自任何地方。

二,请记住,在Drools的规则的LHS的工作有点像一个SQL语句。如果不指定模式之间的任何关系,将使用它们的笛卡尔乘积。

希望能帮助到你


0
投票

对于规则的无环路属性可以确保相同的规则不重新触发时更新/修改是在当条件发生在当时的声明中使用同一个对象。

确定无环路的方法是如下:

rule "Rule1"
no-loop true
© www.soinside.com 2019 - 2024. All rights reserved.