ケーキのパターンで遊んでいて、よくわからないことがあります。
次の共通コードが与えられます。
trait AServiceComponent {
this: ARepositoryComponent =>
}
trait ARepositoryComponent {}
それらを混合する次の方法が機能します
trait Controller {
this: AServiceComponent =>
}
object Controller extends
Controller with
AServiceComponent with
ARepositoryComponent
しかし、以下はそうではありません
trait Controller extends AServiceComponent {}
object Controller extends
Controller with
ARepositoryComponent
エラーあり:
illegal inheritance; self-type Controller does not conform to AServiceComponent's selftype AServiceComponent with ARepositoryComponent
依存関係がすべてのサブクラスに共通であることがわかっている場合、依存関係を階層内で「押し上げる」ことができるはずではありませんか?
Controller
依存関係を解決せずにインスタンス化しない限り、コンパイラは依存関係を持つことを許可すべきではありませんか?