Scala collection.mutable.Cloneable目的

Woo*_*odz 2 scala mutable cloneable

在尝试克隆可变集合时,我最初的方法是在mutable.Cloneable特征上使用clone()方法.但是,这遵循java.Object.clone实现,该实现创建引用的副本,而不是深层副本.从测试中,我可以确认可变.{Queue,Seq,Set}所有浅拷贝.

我已经采用原始的新xxx(copy:_*)方法来创建一个深层副本,但我的问题是mutable.Cloneable特性的目的是什么,如果它没有实现?

axe*_*l22 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没有定义返回深层副本.这样做的原因是,您通常只想复制一个可变集合,以便您可以在不更改原始内容的情况下以某种方式对其进行修改 - 保留在其中的实际元素可能需要保持不变.

如果需要深层复制,则必须使用自定义深层复制库或自行实现.