<RubyLearn/>

クラスとオブジェクト

オブジェクトの複製

Ruby では dup と clone でオブジェクトをシャローコピーできます。 ネストしたオブジェクトを含む場合はディープコピーが必要です。

dup と clone の違い

dupシャローコピー。frozen 状態はコピーされない。特異メソッドはコピーされない。
cloneシャローコピー。frozen 状態もコピーされる。特異メソッドもコピーされる。
Rubyエディタ

ディープコピーの実装

Marshal を使うとディープコピーができます。ただし Marshal.dump できないオブジェクト(IOなど)には使えません。 initialize_copy をオーバーライドして独自のコピーロジックを実装することも一般的です。

Rubyエディタ