如何在Scala中克隆对象?

19

最近遇到一些复制复杂对象的问题。它的内部组织由几个嵌套对象组成。我注意到clone()不可用。

如何解决这个问题呢?


3
哪个物体?它是什么物体决定了很多事情。也许有简单的方法,也许有困难的方法,可能根本没有方法(这也许有充分的理由!)。 - Rex Kerr
2
通常最好的解决方案是设计程序,以完全避免克隆。Scala对不可变数据结构的良好支持使这特别容易。 - Kim Stebel
请注意,如果您的对象是一个 case 类,编译器会生成一个 copy 方法,该方法允许通过命名参数进行完整复制以及仅覆盖特定字段。 - mpilquist
我在这个链接中找到了解决方案:https://dev59.com/wWnWa4cB1Zd3GeqP5_U4。 - akauppi
2个回答

14
如果该复杂对象是可变的或包含可变部分,则解决方案与Java相同。检查关于此的Java问题和帖子,并进行操作。
如果所有内容都是不可变的,则无需克隆任何东西,也不应该这样做。最好的情况下,您应该只复制需要更改的字段的浅层副本;最坏的情况下,您可以使用像lenses或zippers这样的东西来复制一些深层对象并向上传播更改。有关lenses和zippers的问题,请参见Scala的问题。

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接