盡管只有一個匹配案例,但此規則會觸發兩次。我使用 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
提交
取消