Drools:同一案例的规则触发两次

尽管只有一个匹配案例,但此规则会触发两次。我使用 Drools 6.5.0。最后。查看日志,在第二轮中将 $card2 作为 $card1,反之亦然。


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


蛊毒传说
浏览 304回答 2
2回答

繁星淼淼

规则的无循环属性确保在 then 语句中发生 when 条件中使用的相同对象的更新/修改时不会重新触发相同的规则。定义无循环的方法如下:rule "Rule1" no-loop true

12345678_0001

首先,您的规则对我来说看起来不正确。前两个模式缺少它们的类型,并且有一些变量(即name1)不是来自任何地方。其次,请记住 Drools 中规则的 LHS 有点像 SQL 语句。如果您未指定模式之间的任何关系,则将使用它们的笛卡尔积。希望能帮助到你
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java