From: "nobu (Nobuyoshi Nakada)" Date: 2012-12-07T15:49:16+09:00 Subject: [ruby-core:50654] [ruby-trunk - Bug #6038] #instance_eval bug Issue #6038 has been updated by nobu (Nobuyoshi Nakada). =begin I don't think ((|pr2|)) is not guaranteed to be the same object as ((|pr1|)) where pr1 = proc {} pr2 = proc {|&pr| pr}.call(&pr1) =end ---------------------------------------- Bug #6038: #instance_eval bug https://bugs.ruby-lang.org/issues/6038#change-34501 Author: ddebernardy (Denis de Bernardy) Status: Assigned Priority: Normal Assignee: nobu (Nobuyoshi Nakada) Category: Target version: ruby -v: 1.9.3 instance_eval seems to change the object_id in some cases: begin stack = [] do_stuff = lambda do |&chain| puts "Actual: #{chain.object_id}" chain.call end chain = lambda do if filter = stack.shift filter.call(&chain) end end puts "Expected: #{chain.object_id}" stack << do_stuff chain.instance_eval { @completed = false } chain.call end >> RUBY_VERSION => "1.9.3" >> begin ?> stack = [] >> do_stuff = lambda do |&chain| ?> puts "Actual: #{chain.object_id}" >> chain.call >> end >> ?> chain = lambda do ?> if filter = stack.shift >> filter.call(&chain) >> end >> end >> ?> puts "Expected: #{chain.object_id}" >> stack << do_stuff >> chain.instance_eval { @completed = false } >> chain.call >> end Expected: 2152379740 Actual: 2152379520 -- http://bugs.ruby-lang.org/