サンプルの scala コードを次に示します。
abstract class A(val x: Any) {
abstract def copy(): A
}
class b(i: Int) extends A(i) {
override def copy() = new B(x)
}
class C(s: String) extends A(s) {
override def copy() = new C(x)
}
//here's the tricky part
Trait t1 extends A {
var printCount = 0
def print = {
printCount = printCount + 1
println(x)
}
override def copy = ???
}
Trait t2 extends A {
var doubleCount = 0
def doubleIt = {
doubleCount = doubleCount + 1
x = x+x
}
override def copy = ???
}
val q1 = new C with T1 with T2
val q2 = new B with T2 with T1
ご想像のとおり、ここで質問です。T1 と T2 にコピー メソッドを実装するにはどうすればよいでしょうか。それらが B、C、または t2/t1 と混在している場合、ワックスのボール全体のコピーを取得できますか? たとえば、q2.copy は T2 と T1 を持つ新しい B を返し、q1.copy は T1 と T2 を持つ新しい C を返す必要があります。
ありがとう!