2011-06-20 19 views
16

最近、複雑なオブジェクトをコピーするにはいくつかの問題がありました。内部組織は、いくつかのネストされたオブジェクトで構成されています。私はclone()が利用できないことに気づいた。Scalaでオブジェクトをクローンする方法は?

問題を解決する最良の解決策は何ですか?

+2

どのオブジェクトですか?それはそれが何であるかに大きな違いをもたらします。たぶん、簡単な方法があるかもしれません。たぶん難しい方法かもしれません。多分、全く方法がありません(それは正当な理由があるかもしれません!)。 –

+2

多くの場合、最良の解決策は、完全にクローン化されないようにプログラムを設計することです。 Scalaが不変のデータ構造をサポートしていることは、特に簡単なことです。 –

+0

オブジェクトがケースクラスの場合は、コンパイラによって生成されたコピーメソッドがあり、名前付きパラメータを使用して完全なコピーだけでなく、特定のフィールドをオーバーライドできることに注意してください。 – mpilquist

答えて

13

複雑なオブジェクトが変更可能であるか、変更可能な部分が含まれている場合、解決方法はJavaの場合と同じです。それについてJavaの質問&の記事をチェックしてください。

すべてが不変の場合、何も複製する必要はなく、複製しないでください。せいぜい、オブジェクトの浅いコピーを作成し、変更が必要なフィールドだけを変更し、最悪の場合、レンズやジッパーのようなものを使用して深いオブジェクトをコピーし、変更を上方に伝播する必要があります。 Scalaのレンズとジッパーに関する質問を参照してください。

関連する問題