2015-02-05 2 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 ... 

갈라져. 그래서 세션에 이미 10000보다 큰 5 개의 숫자 값이 있고 다른 하나가 삽입 된 경우 "then"부분이 한 번만이 아니라 6 번 (평균값이 각각 숫자 값과 동일 함) 호출됩니다.

해결 방법을 알려주는 힌트가 있습니까?

감사합니다.

답변

0

필드 objectnum 필드에 액세스하는 모든 A 사실에 누적해야합니다.

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

똑 바른

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

감사를 작성하는 것을 허용 할뿐만 아니라 사실 모든 B 개체를 삽입. 나는 그것을 시도 할 것이다. 그러나 내가 언급 한 것을 잊어 버린 점은 클래스 B가 추상적이고 숫자 값이 그 자식 중 하나에 있다는 것입니다. 이 경우에 B 등급을 올바른 아이들에게 던질 수 있습니까? – user3120237

+0

"이 경우"는 어떤 경우입니까? AB는 추상적 인 경우에도 B이며, B를 확장하는 SuB도 B입니다. – laune

+0

필드 num이 하위 클래스 중 하나 (전부는 아님)에 있으면 이처럼 간단한 방법으로는 할 수 없습니다. 인터페이스 B가 정의한 것은 존재하지 않습니다. 하지만 원래 코드는 컴파일되지 않았을 것입니다. – laune

관련 문제