0

作为自学流口水的练习,我正在研究桥牌游戏中的竞标规则。规则彼此独立工作(通过在规则中使用 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
4

1 回答 1

0

When you change an object, you need to tell the engine you updated it. So try adding update($action); at the end of the first rule.

于 2013-03-30T00:14:37.917 回答