2011-06-20 53 views
16

最近有一些问题需要复制一个复杂的对象。其内部组织由多个嵌套对象组成。我注意到clone()不可用。如何克隆Scala中的对象?

解决问题的最佳解决方案是什么?

+2

哪个对象?它是一个巨大的差异。也许有一个简单的方法,也许有一个困难的方式,也许根本没有办法(这可能是一个很好的理由!)。 –

+2

通常最好的解决方案是设计你的程序,避免完全克隆。 Scala对不可变数据结构的良好支持使得特别容易。 –

+0

请注意,如果您的对象是一个案例类,则会有一个由编译器生成的复制方法,该方法允许完整副本以及通过命名参数重写某些字段。 – mpilquist

回答

13

如果该复杂对象是可变的或包含可变部分,则解决方案与Java中的相同。检查Java的问题&关于它的帖子,并做到这一点。

如果一切都是不可变的,那么你不需要也不应该克隆任何东西。充其量,你应该制作一个对象的浅拷贝,只更改需要改变的字段,并且最坏的情况下,你使用像透镜或拉链这样的东西来复制一些深层对象并向上传播这些变化。查看有关镜头和拉链的Scala问题。