2011-06-20 100 views
16

最近有一些問題需要複製一個複雜的對象。其內部組織由多個嵌套對象組成。我注意到clone()不可用。如何克隆Scala中的對象?

解決問題的最佳解決方案是什麼?

+2

哪個對象?它是一個巨大的差異。也許有一個簡單的方法,也許有一個困難的方式,也許根本沒有辦法(這可能是一個很好的理由!)。 –

+2

通常最好的解決方案是設計你的程序,避免完全克隆。 Scala對不可變數據結構的良好支持使得特別容易。 –

+0

請注意,如果您的對象是一個案例類,則會有一個由編譯器生成的複製方法,該方法允許完整副本以及通過命名參數重寫某些字段。 – mpilquist

回答

13

如果該複雜對象是可變的或包含可變部分,則解決方案與Java中的相同。檢查Java的問題&關於它的帖子,並做到這一點。

如果一切都是不可變的,那麼你不需要也不應該克隆任何東西。充其量,你應該製作一個對象的淺拷貝,只更改需要改變的字段,並且最壞的情況下,你使用像透鏡或拉鍊這樣的東西來複制一些深層對象並向上傳播這些變化。查看有關鏡頭和拉鍊的Scala問題。