私はC
いくつかの特性を拡張する特性を定義しようとしていますA
、、B
...すべての特性、C
およびA
、、B
...共通の特性を実装しますT
。Traitはin , ,..の実装を呼び出すこと C
で実装されるはずです:T
T
A
B
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()
ます。これに対する解決策はありますか?