gpt4 book ai didi

scala - 案例类的复制方法是否使用结构共享?

转载 作者:行者123 更新时间:2023-12-02 20:38:16 24 4
gpt4 key购买 nike

Scala 不可变集合中的结构共享非常简单,并且有很多 Material 可以理解它。

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

所以当我有一个

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

并调用copy方法

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

它复制 x 吗?

最佳答案

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

case class Foo(a: AnyRef, b: AnyRef)

val f1 = Foo(new AnyRef, new AnyRef)
val f2 = f1.copy(a = new AnyRef)
f1.a == f2.a // false
f1.b == f2.b // true
f1.b eq f2.b // true

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

关于scala - 案例类的复制方法是否使用结构共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35718363/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com