2014-01-08 32 views
0

考慮:爲什麼我無法用匹配類型的case對象覆蓋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. 
        ^

爲什麼?案例對象繼承了正確的特質,就像案例類一樣。這是Scala 2.10。

+1

我可能會建議您聲明'Base.m'作爲'def'而不是'val'。重疊性狀的val可能會導致各種初始化順序的困境。 –

回答

6

你需要讓Mixin類型的m

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

我經常在發佈問題後的一分鐘就發現我的愚蠢。謝謝。 :) – Matthias

+0

我認爲這個問題是'trait Sub擴展Base {覆蓋大小寫對象m擴展Mixin}' –

相關問題