.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= 新しい A(これ) ^
b. def this(o:A)
トレイトを使用するクラスがそれを提供する必要があることが示されるように、トレイトでコピー コンストラクタ () を宣言する方法はありますか。
c. と言うメリットはありますabstract trait
か?
最後に、これらすべてに対するより良い方法、標準的な解決策はありますか?
Javaのクローン作成について調べました。このためではないようです。また、Scalacopy
はそうではありません。これはケース クラス専用であり、ミュータブルな状態を持つべきではありません。
助けと意見をありがとう。