From: Yuki Sonoda Date: 2009-07-16T15:44:59+09:00 Subject: [ruby-core:24361] [Bug #1711] Marshal Failing to Round-Trip Certain Recurisve Data Structures Issue #1711 has been updated by Yuki Sonoda. class UserDefined class Nested def ==(other) other.kind_of? self.class end end attr_reader :a, :b def initialize @a = 'stuff' @b = @a end def _dump(depth) Marshal.dump [@a, @b] end def self._load(data) a, b = Marshal.load data obj = allocate obj.instance_variable_set :@a, a obj.instance_variable_set :@b, b obj end def ==(other) self.class === other and @a == other.a and @b == other.b end end class UserDefinedWithIvar attr_reader :a, :b, :c def initialize @a = 'stuff' @a.instance_variable_set :@foo, :UserDefinedWithIvar @b = 'more' @c = @b end def _dump(depth) Marshal.dump [@a, @b, @c] end def self._load(data) a, b, c = Marshal.load data obj = allocate obj.instance_variable_set :@a, a obj.instance_variable_set :@b, b obj.instance_variable_set :@c, c obj end def ==(other) self.class === other and @a == other.a and @b == other.b and @c == other.c and @a.instance_variable_get(:@foo) == other.a.instance_variable_get(:@foo) end end arr = [] myproc = Proc.new { |o| arr << o } o1 = UserDefined.new; o2 = UserDefinedWithIvar.new obj = [o1, o2, o1, o2] Marshal.load Marshal.dump(obj), myproc p arr == [o1, o2, obj] ---------------------------------------- http://redmine.ruby-lang.org/issues/show/1711 ---------------------------------------- http://redmine.ruby-lang.org