Base
いくつかのスタッキング トレイトが定義されている抽象基本クラス ( ) があります ( StackingTrait
)。
trait Base {
def foo
}
trait StackingTrait extends Base {
abstract override def foo { super.foo }
}
次の構文を使用してサブクラスを実装すると非常に便利ですが、これは機能しません。なぜなら、コンパイラは foo を宣言してから再コンパイルする必要があると言うoverride
からです。これはクラスでabstract override
あるため無効です。Impl
class Impl extends Base with StackingTrait {
def foo {}
}
そのような構文が許可されない正当な理由が思いつきません。foo は論理的に定義されてImpl
いるため、スタッキングが発生する順序は概念的に同じままです。
注:私が望むのと同じことを効果的に行うこの回避策を見つけましたが、ヘルパークラスの必要性により、より良い解決策が必要になります。
class ImplHelper extends Base {
def foo {}
}
class Impl extends ImplHelper with StackingTrait
目的の構文がコンパイルされないのはなぜですか? また、洗練された解決策はありますか?