RubyのMarshalによる配列やハッシュのディープコピー
タグ: ruby / 初版公開: 2014-05-18

RubyでmarshalライブラリのMarshal.dumpMarshal.loadを使えば、Rubyの配列やハッシュを簡単にディープコピーすることができる。以下はそのサンプルコード。

a = ['foo', 'bar', 'baz']
b = Marshal.load(Marshal.dump(a)) # Marshalによるディープコピー

a.map!{|i| i.upcase } # 元の配列を破壊的に変更

p a #=> ["FOO", "BAR", "BAZ"]
p b #=> ["foo", "bar", "baz"]

複雑に組み合わさった配列やハッシュでも全く同じ方法でディープコピーできるため、自力でディープコピーの処理を実装するよりかなり簡単である。

もともとシリアライズの機能を提供するmarshalライブラリをこんな形で使うというのは少々トリッキーではあるが、テクニックといえばテクニックかも知れない。

Rubyレシピブック 第3版 303の技
青木 峰郎 後藤 裕蔵 高橋 征義
ソフトバンククリエイティブ
売り上げランキング: 284,046