3
這裏已經組成是代碼:特質組成將在新的情況下被忽略,如果它是在類級別
trait Foo {
def get(x: Int): Int
}
trait Simple extends Foo {
override def get(x: Int): Int = x
}
trait Add15 extends Foo {
abstract override def get(x: Int): Int = x + 15
}
trait Add30 extends Foo {
abstract override def get(x: Int): Int = {
super.get(x) + 30
}
}
class Queue extends Simple with Add15 with Add30
new Queue with Add30 get 0 // same as new Queue get 0, because with Add30 is ignored
我只是想知道這是它最好有一個編譯錯誤,而不是忽略它?它就像
class Queue extends Simple with Add15 with Add30 with Add30
將有一個編譯錯誤
提前
的可能重複[斯卡拉:如何繼承兩次同一性狀](http://stackoverflow.com/questions/17287395/scala-how-to-inherit-the-same-trait-twice),或[繼承的性狀兩次(http://stackoverflow.com/questions/7230808/inheriting-a-trait-twice)。 – DaoWen
@DaoWen IMO這是一個不同的問題:如果'Add30'是一個正常的性狀然後'與Add30'新隊列[記錄了意圖](http://stackoverflow.com/questions/4387419/why-does-arraylist-have -implements-list)Queue正在實現'Add30',但是當特徵可堆疊時它是否成立? –
這是否有道理,還是不依賴於可堆疊特性的語義,這不是東西是在類型系統中捕獲的,因此禁止將排除,你可能合法地希望能夠重複性狀記錄意圖的情況下(正如@ShyamendraSolanki所說)。 –