我试图弄清楚如何.clone
在 Scala 中创建自己的对象。
这是为了模拟,所以可变状态是必须的,由此产生了对克隆的全部需求。在将模拟时间提前之前,我将克隆一个完整的状态结构。
这是我目前的尝试:
abstract trait Cloneable[A] {
// Seems we cannot declare the prototype of a copy constructor
//protected def this(o: A) // to be defined by the class itself
def myClone= new A(this)
}
class S(var x: String) extends Cloneable[S] {
def this(o:S)= this(o.x) // for 'Cloneable'
def toString= x
}
object TestX {
val s1= new S("say, aaa")
println( s1.myClone )
}
一种。为什么上面没有编译。给出:
错误:需要类类型但找到 A def myClone=new A(这个) ^
湾。有没有办法在 trait 中声明复制构造函数 ( def this(o:A)
),以便使用该 trait 的类显示需要提供一个。
C。说出来有什么好处abstract trait
吗?
最后,对于这一切,有没有更好的标准解决方案?
我研究了 Java 克隆。似乎不是为了这个。Scalacopy
也不是 - 它仅适用于案例类,它们不应该具有可变状态。
感谢您的帮助和任何意见。