考慮下面的代碼:爲什麼Scala在分配給抽象類型時會丟失實際的類型?
abstract class Foobar {
type Parent <: Foobar
def parent: Option[Parent]
}
class Foo extends Foobar {
type Parent = Nothing
val parent = None
// ***
// Taking the explicit declaration of the "bar" method's return type
// "Bar" away convinces Scala to compile the code. In other words:
//
// def bar() = new Bar
// ***
def bar(): Bar = new Bar {
type Parent = Foo
val parent = Some(Foo.this)
}
}
abstract class Bar extends Foobar
(new Foo).bar().parent.get.bar()
我的問題:
你能解釋一下爲什麼會這樣?請參閱上面的內嵌評論。
你有解決方案嗎?
我碰到斯卡拉-SDK的斯卡拉工作表以下錯誤消息版本3.0.2-vfinal-20131028-1923類型安全:
Multiple markers at this line
- value bar is not a member of scrap.Bar#Parent
- value bar is not a member of scrap.Bar#Parent
確定,離開了 「欄」方法的返回類型的聲明讓我從斯卡拉工作表以下信息消息:
> res0: scrap.Bar{type Parent = scrap.Foo; val parent: Some[scrap.Foo]} = scra
//| [email protected]
有沒有辦法給這個類型一個體面的名字,非常「Foobar的#父」?
請張貼的編譯器錯誤。我知道這看起來很迂腐,但未來版本的scalac可能會有不同的表現。 –