我想知道如何在Scala中使用.clone
我自己的對象。在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)
}
一個。爲什麼上面沒有編譯。提供:
error: class type required but A found def myClone= new A(this) ^
b。是否有辦法在特徵中聲明拷貝構造函數(def this(o:A)
),以便使用特徵的類將被顯示爲需要提供一個特徵。
c。說abstract trait
有什麼好處嗎?
最後,有沒有更好的方法,所有這一切的標準解決方案?
我已經研究過Java克隆。似乎不是爲了這個。此外Scala copy
不是 - 它只適用於case類,它們不應該有可變狀態。
感謝您的幫助和任何意見。
如果你克隆狀態_every time step_那麼爲什麼「可變狀態是必須的」?只有當你不需要每次都創建一個克隆時,可變性纔是有效的。 –