这是一些示例 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
谢谢!