为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

蛊毒传说 2022-06-04 15:35:29
尽管只有一个匹配案例,但此规则会触发两次。我使用 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


查看完整回答
反对 回复 2022-06-04
?
12345678_0001

TA贡献1802条经验 获得超5个赞

首先,您的规则对我来说看起来不正确。前两个模式缺少它们的类型,并且有一些变量(即name1)不是来自任何地方。

其次,请记住 Drools 中规则的 LHS 有点像 SQL 语句。如果您未指定模式之间的任何关系,则将使用它们的笛卡尔积。

希望能帮助到你


查看完整回答
反对 回复 2022-06-04
  • 2 回答
  • 0 关注
  • 303 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号