尽管只有一个匹配案例,但此规则会触发两次。我使用 Drools 6.5.0。最后。查看日志,在第二轮中将 $card2 作为 $card1,反之亦然。rule "Rule1"salience 1when $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
2 回答

繁星淼淼
TA贡献1775条经验 获得超11个赞
规则的无循环属性确保在 then 语句中发生 when 条件中使用的相同对象的更新/修改时不会重新触发相同的规则。
定义无循环的方法如下:
rule "Rule1" no-loop true

12345678_0001
TA贡献1802条经验 获得超5个赞
首先,您的规则对我来说看起来不正确。前两个模式缺少它们的类型,并且有一些变量(即name1
)不是来自任何地方。
其次,请记住 Drools 中规则的 LHS 有点像 SQL 语句。如果您未指定模式之间的任何关系,则将使用它们的笛卡尔积。
希望能帮助到你
添加回答
举报
0/150
提交
取消