0
Почему ObjectSpace._id2ref
дают разные выходы на Ruby 1.9 и Ruby 2.0?Почему «ObjectSpace._id2ref» дает разные результаты на Ruby 1.9 и Ruby 2.0?
Рубин 1.9.3p392 i386-mingw32
class Foo ; end
Foo.object_id #=> 17569464
ObjectSpace._id2ref(17569464) #=> Foo
Foo.new.singleton_class.object_id #=> 17075124
ObjectSpace._id2ref(17075124) #=> "\x00"
Рубин 2.0.0p0 i386-mingw32
class Foo ; end
Foo.object_id #=> 17197176
ObjectSpace._id2ref(17197176) #=> Foo
Foo.new.singleton_class.object_id #=> 19181436
ObjectSpace._id2ref(19181436) #=> RangeError: 0x124af7c is recycled object
Foo.new.singleton_class.object_id #=> 17454324
ObjectSpace._id2ref(17454324) #=> RangeError: 0x10a54f4 is not id value
Foo.new.singleton_class.object_id #=> 17139816
ObjectSpace._id2ref(17139816) #=> "c"
смотрите мое 'EDIT'. С Ruby2.0, которые выводят изменения –
Вы пытаетесь распечатать кусок кучи памяти, который уже очищен. Все может быть напечатано, контракт на такое не существует. Попытайтесь хотя бы включить вызовы 'new' и' _id2ref' в мьютекс. – mudasobwa
Ваше предложение ценно для меня, так что вы предлагаете, не могли бы вы вставить это в свой ответ? –