我試圖在匿名類中聲明參數化類型的屬性。這部作品在Java中,斯卡拉(2.9),但我得到的編譯錯誤:在Scala中的匿名類中使用類型參數
Parameter type in structural refinement may not refer to an abstract type defined outside that refinement
這是代碼:
object DemoFail extends App {
def it[T <: AnyRef](x: T) = new Iterator[T] {
var i = x // here is the error
def next = i
def hasNext = true
}
for (i ← it(int2Integer(4))) println(i)
}
我可以得到它的「擦除」手動類型的工作:
object DemoOK extends App {
def it[T <: AnyRef](x: T) = new Iterator[T] {
var i: AnyRef = x
def next = i.asInstanceOf[T]
def hasNext = true
}
for (i ← it(int2Integer(4))) println(i)
}
所以問題是:爲什麼編譯器不能爲我做?
通過向您的迭代器添加公共變量,您可以創建一個結構類型,它是Iterator的子類型。如果您將我更改爲一個私有變量,它將起作用。 – 2011-05-29 21:59:02
事實上,我不知道我怎麼會錯過這樣一個明顯的解決方案。 – 2011-05-29 23:54:35
@Kris:請回答以下答案,以便我可以正確接受它。 – 2011-05-29 23:55:44