7
我知道Scala只能混入特性,它對依賴注入和餅形模式是有意義的。我的問題是爲什麼我仍然可以申報一個需要另一個「班級」而不是特質的班級。爲什麼自我類型可以聲明類
代碼:
class C
class D { self : C =>}
這仍然是成功的遵守。我認爲它應該編譯失敗,因爲在這一點上新的實例D(C是不是特性)。
編輯:
當嘗試實例d:
與新的d C^//編譯失敗的C類必須是一個特點在混合
我知道Scala只能混入特性,它對依賴注入和餅形模式是有意義的。我的問題是爲什麼我仍然可以申報一個需要另一個「班級」而不是特質的班級。爲什麼自我類型可以聲明類
代碼:
class C
class D { self : C =>}
這仍然是成功的遵守。我認爲它應該編譯失敗,因爲在這一點上新的實例D(C是不是特性)。
編輯:
當嘗試實例d:
與新的d C^//編譯失敗的C類必須是一個特點在混合
你應該明確地使class D
到extends C
如下:
class C
class D extends C { self: C => }
此外,你可以參考ŧ郵政Does a class with a self type of another class make sense?,這清楚地解釋了這個問題。
您錯過了嘗試實際創建D的實例,請執行此操作並查看會發生什麼。 – johanandren
'self'的類型是'D with C'。我不確定除文檔外是否還有用例。 –
這是我的問題,如果創建一個D的實例,就有一個編譯錯誤。新D與C:10:錯誤:類C需要是一個特質混合在 新D與C –