簡體   English   中英

scala中的自我類型繼承

[英]Self type inheritance in scala

說我有以下特征:

trait A

trait B { this: A => }

trait C extends B // { this: A => }

編譯錯誤: illegal inheritance; self-type C does not conform to B's selftype B with A illegal inheritance; self-type C does not conform to B's selftype B with A
正如所料,如果我取消注釋自我類型注釋,編譯器很高興。

我認為很明顯為什么C也需要這種自我類型。 我不明白為什么它不能從A“繼承”它,如果編譯器已經知道它需要它?

我認為當你使用具有復雜層次結構的自我類型時,它可以減少冗長,特別是如果你混合了大量的特征,每個特征都有自己的自我類型。

我想可能有一個很好的理由當前的行為,我只是找不到/弄清楚它是什么。

起初我認為它可能與mixin線性化有關,但在我看來它並沒有在這里發揮(即使我有更多的特征與更復雜的自我類型混合)。

在某些情況下會引起歧義嗎? 如果是這樣,為什么在沒有歧義的情況下它不能起作用?

或者它與正確實施它的一些困難有關?

我可以找到關於這個主題的一些討論(比如自我類型不是繼承的 ),但是他們大多只是陳述問題並得出結論是沒有太多解釋和/或解決方案(如果它存在)的情況。

trait C extends B with A

不是唯一的解決方案。 你也可以

trait AA extends A
trait C extends B with AA

也就是說,接受了繼承A接口的所有內容。 如果你必須依賴具體的實現,你會選擇mixin; 如果實現取決於用戶,或者您有充分的理由不在特征中指定mixin(例如,為了放松依賴性問題),那么您將使其成為自我類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM