From: ts Date: 2003-07-09T23:09:32+09:00 Subject: Re: Marshaling objects partially >>>>> "T" == Tanaka Akira writes: T> When object A and B refer each other, which _load is called first? I must say that I've not understood svg% cat b.rb #!/usr/bin/ruby class C attr_accessor :ref @@dumped = {} @@loaded = [] @@num = 0 def _dump(limit) if @@dumped[self] "\000#{@@dumped[self]}\000" else @@dumped[self] = @@num @@num += 1 Marshal.dump([@ref], limit-1) end end def self._load(str) if /\A\000(\d+)\000\z/ =~ str obj = @@loaded[$1.to_i] else obj = self.new @@loaded.push(obj) obj.ref = Marshal.load(str).shift end obj end end a = C.new b = C.new a.instance_eval { @ref = b; @xxx = STDIN } b.instance_eval { @ref = a; @xxx = STDIN } p a m = Marshal.dump(a) c = Marshal.load(m) p c p c.ref svg% svg% b.rb #, @xxx=#>, @xxx=#> #>> #>> svg% Guy Decoux