作为一种教导自己流口水的练习,我正在研究桥牌游戏中的竞标规则。规则彼此独立工作(通过在规则中使用drools.halt()强制执行)但是当我尝试通过删除halt()调用来扩展示例时,我得到了我没想到的行为。在下面的示例中,我将在第一个规则中注释掉halt(),并将size()条件添加到第二个规则以替换它,尝试阻止第二个规则触发。我不希望第二条规则被解雇,因为第一条规则的后果为拍卖的集合添加了一个出价,因此在规则2中,计数不应该为零。我已尝试在第一条规则中明确添加“更新”或“修改”指令,但这没有任何区别。
rule "rule1"
salience 100
when
$auction : Auction( $currentBidder : currentBidder != null )
$hand : Hand( owner.equals($currentBidder), getTotalPoints(getLongestSuit()) >= 13 )
then
$auction.bid($currentBidder, new Bid(1, $hand.getLongestSuit()));
//drools.halt();
end
rule "rule2"
salience 1
when
$auction : Auction( $currentBidder : currentBidder != null, getPlayerBids().size() == 0 )
Hand(owner.equals($currentBidder))
then
$auction.bid($currentBidder, new Pass());
drools.halt();
end
答案 0 :(得分:0)
更改对象时,需要告诉引擎更新它。所以尝试添加更新($ action);在第一条规则的最后。