私が次の特徴を持っているとしましょう:
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
予想どおり、自己型アノテーションのコメントを外すと、コンパイラは問題ありません。
Cもこのセルフタイプを必要とする理由は明らかだと思います。コンパイラがすでに必要であると判断できた場合、なぜAから「継承」できないのか理解できません。
複雑な階層を持つセルフタイプを使用する場合、特に、それぞれが独自のセルフタイプを持つ多数の特性を混在させる場合は、冗長性を減らすことができると思います。
私はおそらく現在の振る舞いには正当な理由があると思います、私はそれが何であるかを見つける/理解することができませんでした。
最初は、ミックスインの線形化に関連しているのではないかと思いましたが、ここでは再生されないようです(より複雑な自己タイプとより多くの特性が混在している場合でも)。
場合によってはあいまいさが発生しますか?もしそうなら、あいまいさがないのになぜそれが機能しないのですか?
それとも、それを適切に実装する際のいくつかの困難に関連していますか?
トピックに関するいくつかの議論を見つけることができましたが(自己タイプが継承されていないなど)、ほとんどの場合、問題を述べているだけで、説明や解決策(存在する場合)があまりないので、それがどのようであるかを結論付けています。