案例类'复制方法使用结构共享?

时间:2016-03-01 08:54:34

标签: scala functional-programming copy clone immutability

Scala中的结构共享不可变集合非常简单,并且有许多材料可供使用来理解它。

现在每个Scala case class都会自动定义一个copy方法,该方法返回一个指定了新属性的新副本,我的问题是,该方法是否使用结构共享?

所以,当我有一个

case class A(x: HugeObject, y: Int)

并调用copy方法

val a = A(x,y)
val b = a.copy(y = 5)

是否复制x?

1 个答案:

答案 0 :(得分:6)

案例类是扁平元组,因此当使用 copy 时,为每个产品元素分配一个新实例。但是,元素本身不是任何形式的重复,而是通过引用共享(除了传递给 copy 方法的值)。




 < code> case class Foo(a:AnyRef,b:AnyRef)&#xA;&#xA; val f1 = Foo(new AnyRef,new AnyRef)&#xA; val f2 = f1.copy(a = new AnyRef)& #xA; f1.a == f2.a // false&#xA; f1.b == f2.b // true&#xA; f1.b eq f2.b // true&#xA;  
&#xA;&#xA;

因此,在您的情况下, x 仅作为相同的引用重用,但不会在结构上重复。

&#xA;