2

可変コレクションのクローンを作成しようとしたとき、私の最初のアプローチは、mutable.Cloneable特性でclone()メソッドを使用することでした。ただし、これは、ディープコピーではなく、参照のコピーを作成するjava.Object.clone実装に依存します。テストから、可変であることが確認できます。{Queue、Seq、Set}すべての浅いコピー。

ディープコピーを作成するために大雑把な新しいxxx(copy:_ *)アプローチに頼りましたが、私の質問は、可変の目的は何ですか?実装されていない場合のクローン可能な特性ですか?

4

1 に答える 1

5

mutable.Cloneableトレイトは多くのコレクション クラスに実装されました。以下にいくつかの例を示します。

https://github.com/scala/scala/blob/master/src/library/scala/collection/mutable/ArrayBuffer.scala#L176

https://github.com/scala/scala/blob/master/src/library/scala/collection/mutable/HashSet.scala#L82

https://github.com/scala/scala/blob/master/src/library/scala/collection/mutable/WrappedArray.scala#L78

cloneディープコピーを返すように定義されていないだけです。この理由は、元のコレクションを変更せずに何らかの方法で変更できるように、変更可能なコレクションをコピーしたいだけであることがよくあります。その中に保持されている実際の要素は同じままにしたい場合があります。

ディープ コピーが必要な場合は、カスタムのディープ コピー ライブラリを使用するか、それを自分で実装する必要があります。

于 2012-07-19T12:07:29.873 に答える