[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[dennou-ruby:000100] Re: deep copy
ごとけんです
In message "[dennou-ruby:000099] Re: deep copy"
on 99/09/24, GOTO Kentaro <gotoken@xxxxxx> writes:
>汎用のを作るより、クラスごとに自作のコピーメソッドを付けたほ
>うが楽かも。汎用ならこんな感じかなぁ。ただしコンテナには対応
>してません。
Marshal を使うという手を思いだしました。これなら相互参照もばっ
ちりなはず。ただし Marshal.dump の持つ制限があります:
module DeepCopieable
require "marshal"
def deep_copy
# this method uses marshal, so Class, Module, IO, Data and their
# descendants cannot be copied.
r, w = IO.pipe
Marshal.dump(self, w)
w.close
Marshal.load(r)
end
end
class Foo
include DeepCopieable
attr_accessor :a, :b
end
foo = Foo.new
foo.a = "helo"
foo.b = ["hi"]
bar = foo.deep_copy
p [foo.a.id, bar.a.id] # id is unique for each objects
p [foo.b[0].id, bar.b[0].id] # container is also supported now