1

私はCいくつかの特性を拡張する特性を定義しようとしていますA、、B...すべての特性、C およびA、、B...共通の特性を実装しますT。Traitはin , ,..の実装を呼び出すこと Cで実装されるはずです:TTAB

trait T{
  def f()
}
trait A extends T{
  def f(){
    print("A")
  }
}
trait B extends T{
  def f(){
    print("B")
  }
}

トレイトの望ましい動作は次のCとおりです。

val x=new A with B with C[A,B]{}
x.f()
// should produce output
A
B

ここで、コンパイル エラーが発生した特性 C を定義しようとしました。

trait C[A<:T,B<:T] extends T{
  self:A with B =>
  override def f(){
    // error: A does not name a parent class of trait C
    super[A].f()
    // error: B does not name a parent class of trait C
    super[B].f()
  }
}

CメソッドA.f()と内で呼び出す必要がありB.f()ます。これに対する解決策はありますか?

4

1 に答える 1