2014-11-05 46 views
1
trait Base 
{ 
    val widget = new Widget {} 

    trait Widget 
} 

trait Child1 extends Base 
{ 
    override val widget = new Widget {} 

    trait Widget extends super.Widget 
} 

trait Child2 extends Base 
{ 
    override val widget = new Widget {} 

    trait Widget extends super.Widget 
} 

class Sample extends Child1 with Child2 
{ 
    override val widget = // Here be dragons 
} 

有什麼方法可以在Sample中正確組成小部件嗎?如果Child1#Widget和Child2#Widget具有可分辨的名稱,它工作正常,但我很好奇它是否可以像這樣訪問它們。如何通過顯式名稱空間訪問內部類?

我與new Child1#Widget with Child2#Widget失敗: 「不是合法的前綴構造」

override val widget = 
{ 
    val a = this: Child1 
    val b = this: Child2 

    new a.Widget with b.Widget {} 
} 

「非法繼承:繼承特質的Widget不同類型實例」

回答

2

您可能試試這個:

class Sample extends Child1 with Child2 { 
    override val widget = new Widget {} 
    trait Widget extends super[Child1].Widget with super[Child2].Widget 
} 

或者只是:

class Sample extends Child1 with Child2 { 
    override val widget = new super[Child1].Widget with super[Child2].Widget {} 
} 
+0

對於爲什麼這種方法不能使用包裹限定符的一個旁註:https://issues.scala-lang.org/browse/SI-1915 – Taig 2014-11-16 19:49:42

相關問題