【发布时间】:2012-10-23 14:01:47
【问题描述】:
我试图弄清楚如何在 Scala 中 .clone 我自己的对象。
这是为了模拟,所以可变状态是必须的,由此产生了对克隆的全部需求。在将模拟时间提前之前,我将克隆一个完整的状态结构。
这是我目前的尝试:
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(这个) ^b.有没有办法在 trait 中声明复制构造函数 (def this(o:A)),以便使用该 trait 的类显示需要提供一个。
c。说abstract trait有什么好处吗?
最后,有没有更好的标准解决方案?
我研究过 Java 克隆。似乎不是为了这个。 Scala copy 也不是 - 它仅适用于案例类,它们不应该具有可变状态。
感谢您的帮助和任何意见。
【问题讨论】:
-
如果你克隆状态每个时间步那么为什么“可变状态是必须的”?只有当您不需要每次都需要进行克隆时,可变性才有效。
标签: scala