2013-12-20 23 views
0

有一個容器類,它有一個整數集合。我的目標是計算所有整數的總和。我在這裏使用工作流規則引擎。這兩條規則有點像如下:爲什麼規則在對象的上下文中執行多次?

RuleName: Initializer 
Priority: 2 
Condition : 1==1 
ThenActions: 
    this.i = 0; 
ReEvaluationBehavior: Always 

---- 

RuleName: Looping 
Priority: 1 
Condition: this.i < this.Items.Count 
ThenActions: 
    this.total = this.total + this.Items[this.i]; 
    this.i = this.i + 1; 
ReEvaluationBehavior: Always 

這只是一個抽象表示。容器類定義爲:

public class NumberContainer 
{ 
    public int i; 
    public int ItemCount 
    { 
     get 
     { 
      return this.Items.Length; 
     } 

     private double total; 

     public double Total 
     { 
      get { return total; } 
      set { total = value; } 
     } 

     private double[] items; 

     public double[] Items 
     { 
      get { return items; } 
      set { items = value; } 
     } 

     //Other stuff... 
    } 
} 

我只在這裏顯示了重要的字段。所有這些(即填充的容器對象和規則集)都被提供給規則引擎執行。

爲什麼Looping規則會執行多次,而Initializer規則只會執行一次?這是否與Chaining有關?是否我們在Looping規則中設置了i的值,並且相同的變量恰好是相應規則條件的一部分?

回答

0

典型情況下,基於RETE的/前向鏈規則引擎在條件成爲「新近成立」時執行規則。在這種情況下,新判斷意味着條件是真實的,並且自從上次檢查條件以來,其輸入變量之一已經發生了變化。

在你的情況下,第一條規則沒有輸入變量,因此只被觸發一次。第二條規則有兩個輸入變量,this.ithis.Items.Count。在第一個被觸發後,第二個規則修改this.i,導致在觸發規則後重新檢查其條件。然後條件再次變爲真(重複,直到this.i>=this.Items.Count)。

相關問題