2014-01-08 3 views
0

을 감안할 때 : 일치하는 유형의 사례 개체로 val을 재정의 할 수없는 이유는 무엇입니까?

trait Mixin {} 

case class A(a: Int) extends Mixin 
case object B extends Mixin 

trait Base { 
    val m = A(1) 
} 

trait Sub extends Base { 
    override val m = B // does. not. compute. 
} 

나는 특성 Sub에서 컴파일 오류가 발생합니다 :

<console>:18: error: overriding value m in trait Base of type A; 
value m has incompatible type 
     override val m = B // does. not. compute. 
        ^

이유는 무엇입니까? case 객체는 case 클래스와 마찬가지로 올바른 특성을 상속합니다. 이것은 스칼라 2.10입니다.

+1

나는 당신이'def' 아닌'val'로'Base.m'를 선언하는 것이 좋습니다 수 있습니다. 형질에 우선권을 부여하면 모든 종류의 초기화 명령에 어려움을 겪을 수 있습니다. –

답변

6

당신은 유형 Mixinm을해야합니다

trait Base { 
    val m: Mixin = A(1) 
} 
+0

종종 질문을 게시 한 후 잠시 내 어리 석음을 알아 냈습니다. 감사. :) – Matthias

+0

나는 문제가'trait Subtext Base {override case object m Mixinin}'이 될 것이라고 생각했다. –

관련 문제