2013-03-29 61 views
0

作为一名教练自己流口水的练习,我正在制定桥牌游戏竞价规则。这些规则独立于对方(通过在规则中使用drools.halt()来强制执行),但是当我试图通过删除halt()调用来扩展该示例时,我得到了我没有想到的行为。在下面的示例中,我将第一条规则中的halt()注释掉,并将size()条件添加到第二条规则中以替换它,尝试阻止第二条规则被触发。我不希望第二条规则会被触发,因为第一条规则的后果为竞价收藏添加了竞价,因此在规则2中计数不应为零。我已经尝试在第一条规则中明确添加“更新”或“修改”指令,但这没有任何区别。为什么规则2的规则1后果影响行为?

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

谢谢,但我已经试过,并没有帮助 – wytten