2011-01-23 3 views
2

이것은 this question의 후속 조치입니다.스칼라 자체 유형 : 유형 매개 변수 오류의 구성원

왜이 코드가 컴파일되지 않으며 어떻게 수정합니까?

trait Vec[V] { self:V => 
    def -(v:V):V 
    def dot(v:V):Double 

    def norm:Double = math.sqrt(this dot this) 
    def dist(v:V):Double = (this - v).norm 
} 

오류이다

Vec.scala:6: error: value norm is not a member of type parameter V 
    def dist(v:V):V = (this - v).norm 
          ^

답변

3

적절한 용액 것은 다음 답변 Debilski

trait Vec[V <: Vec[V]] { self:V => 
    def -(v:V):V 
    def dot(v:V):Double 

    def norm:Double = math.sqrt(this dot this) 
    def dist(v:V):Double = (this - v).norm 
} 

소품 related question.

6

의 정의를 변경함으로써 -

def -(v:V):Vec[V] 
+0

감사합니다. 뭐가 잘못 됐어? – dsg

+2

자체 형식 선언은 단방향입니다. Vec [V]는 V 타입을 따르는 타입이지만, V는 Vec [V]를 따르는 타입이 아닙니다 (실제 타입은 외부 적으로 볼 수 없으므로 실제 의미가 더 복잡합니다. 여기에 달한다). 원래 코드는 V를 반환했지만 호출 표준은 Vec [V]가 필요했습니다. –