我有一个 var x 类型的 ListBuffer[ListBuffer[Int]] 在其中我使用函数 clone 克隆并设置为另一个 var y ,然后我在这个新的 update 上使用函数 var y 来更新内容,但是当我检查 var x 的原始内容时,它是相同的作为 var y ?为什么是这样?我究竟做错了什么?他们是一种解决方法吗?我正在尝试获得一份 ListBuffer 的副本,我可以在不更改初始 ListBuffer 的原始内容的情况下对其进行修改。

最佳答案

clone 只做一个浅拷贝,你需要一个深拷贝:

scala> import collection.mutable.ListBuffer
import collection.mutable.ListBuffer

scala> var a = ListBuffer(ListBuffer(1, 2), ListBuffer(3,4))
a: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(1, 2), ListBuffer(3, 4))


scala> var b = a.clone
b: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(1, 2), ListBuffer(3, 4))

scala> b(0)(0) = 100

scala> a
res1: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(100, 2), ListBuffer(3, 4))

scala> b
res2: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(100, 2), ListBuffer(3, 4))

scala> var c = a.clone.map(_.clone)
c: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(100, 2), ListBuffer(3, 4))

scala> c(0)(0) = 1000

scala> c
res3: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(1000, 2), ListBuffer(3, 4))

scala> a
res4: scala.collection.mutable.ListBuffer[scala.collection.mutable.ListBuffer[Int]] = ListBuffer(ListBuffer(100, 2), ListBuffer(3, 4))

关于scala - 克隆 ListBuffer 不可变问题 Scala,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40602876/

10-11 04:14