2013-03-29 108 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