尽管只有一种匹配的情况,此规则也会触发两次。我使用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
答案 0 :(得分:0)
首先,您的规则对我来说似乎不正确。前两个模式缺少其类型,并且有一些变量(即name1
)不是来自任何地方。
第二,请记住,Drools中的规则的LHS有点像SQL语句。如果您在模式之间未指定任何关系,则将使用它们的笛卡尔积。
希望有帮助
答案 1 :(得分:0)
规则的No-Loop属性可确保在then语句中发生when条件的同一对象的更新/修改时,不会重新触发同一规则。
定义无环的方法如下:
rule "Rule1"
no-loop true