From: pegacorn Date: 2007-04-12T12:00:30+09:00 Subject: [ruby-list:43424] 深いコピーの作成 (was: Re: オブジェクトのインスタンス変数名の取得) 07/04/11 に GOTO Kentaro さんは書きました: > > 現在ソースにアクセスできないみたいです… > > 手元のブックマークをさがしてみました。 > http://cvs.m17n.org/viewcvs/ruby/amarshal/ ありがとうございます。アクセスできました。 説明がほとんど無くソースをチラ見しただけですが、 組み込みクラスは個別に対応しているようですね。 自分も個別に対応するしかないかなーと思って、 取り敢えずインスタンス変数に情報を保持しているクラスなら 深いコピーを作成できる(と思う)メソッドを作ってみました。 http://d.hatena.ne.jp/pegacorn/20070412/1176309956 >|ruby| class Object def deep_clone return @deep_cloning_obj if @deep_cloning @deep_cloning_obj = clone @deep_cloning_obj.instance_variables.each do |var| val = @deep_cloning_obj.instance_variable_get(var) begin @deep_cloning = true val = val.deep_clone rescue TypeError next ensure @deep_cloning = false end @deep_cloning_obj.instance_variable_set(var, val) end deep_cloning_obj = @deep_cloning_obj @deep_cloning_obj = nil deep_cloning_obj end end ||< -- pegacorn