RubyでmarshalライブラリのMarshal.dump
とMarshal.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の技
posted with amazlet at 14.05.18
青木 峰郎 後藤 裕蔵 高橋 征義
ソフトバンククリエイティブ
売り上げランキング: 284,046
ソフトバンククリエイティブ
売り上げランキング: 284,046