2015-02-05 76 views
0

我有以下的類結構(A類包含B類):不能使累積到正常工作

class A { 
    B object; 
    ... 
} 

,我試圖做一些事情只要平均一個特定領域的積累在B類中高於給定值。

所以我想編寫如下:

when 
    A($var1 : object) 
    accumulate(B($num:num) from $var1; 
       $avg1 : avg ($num); $avg1 < 10000) 
then ... 

發生什麼事,而不是積累的所有實體,會話並計算平均值爲所有的人,正在對每個實體計算的平均分別。 所以如果會話已經包含5個大於10000的數字值,並且插入另一個數字,那麼「then」部分將被調用6次(每一個的平均值等於數字值本身),而不是隻調用一次。

你有一些提示可以幫助我解決這個問題嗎?

謝謝。

回答

0

你必須積累所有A事實,訪問字段object的字段num

when 
    accumulate(A($var1: object); 
       $avg1: avg($var1.getNum()); $avg1 < 10000) 
then ... 

插入所有的B對象的事實,以及將允許你寫的簡單

when 
    accumulate(B($num: num); 
       $avg1: avg($num); $avg1 < 10000) 
then ... 
+0

感謝。我會嘗試。但是我忘記提到的一件事是,B類是抽象的,數字值是在它的一個孩子裏面。在這種情況下,我可以把B班教給正確的孩子嗎? – user3120237 2015-02-06 09:14:13

+0

哪種情況是「這種情況」? AB是一個B,即使是抽象的,並且一個擴展B的B也是一個B, – laune 2015-02-06 11:30:01

+0

如果字段num只在一個(不是全部)子類中,那麼你不能以這樣一種簡單的方式來做到這一點,因爲接口由B定義不存在。但那麼你的原始代碼將不會編譯。 – laune 2015-02-06 11:34:55