對象O
擴展了T1
的特性,其中定義了C
類型。類型不匹配:對象中引用的類型與對象擴展的特徵中定義的類型不同?
在T1
我想操縱對象O
中定義的靜態數據結構stack
。 但是編譯器不斷抱怨
類型不匹配發現T1.this.C,需要OC
的代碼是這樣的:
trait T1 {
case class C(i: Int, s: String)
def dumbAdd(i: Int, s: String) = {
O.stack.push(C(i, s)) // type mismatch error goes here.
}
}
object O extends T1 {
var stack: Stack[C] = new Stack[C]
}
我感到困惑......沒有按't O
知道C
,應該與T1
中的那個類型相同? 我在這裏錯過了什麼? ,我該如何做我想做的事?
更新
基於一個建議,把C
在對象T1
,但在我的真實的例子,對象T1
不能訪問到性狀T1
定義的類型。降低的問題如下:
trait T1 {
abstract sealed class S
case class SC extends S
def dumbAdd(i: Int, s: String) = {
O.stack.push(C(i, s))
}
}
object T1 {
case class C(i: Int, s: String)
def tryASC {
val scc = SC() // Here the compiler says not found value SC
}
}
object O extends T1 {
var stack: Stack[C] = new Stack[C]
}
請添加錯誤消息的行和符號,以便我們確切知道_where_發現了不匹配。 – 2013-02-23 20:30:43
@ DanielC.Sobral我更新了這篇文章。謝謝! – monica 2013-02-23 20:33:43