もりきゅうです。

以下の例で、式を文字列ではなくブロックで渡したいので
eval を Object#instance_eval に置き換えたいと思います。

eval('code', myproc)
と
myproc.instance_eval{code}
あるいは
myproc.instance_eval('code')
は同じだと考えたのですが間違ってますか。

ruby 1.6.7 (2002-03-01) [i586-mswin32]
ruby 1.7.3 (2002-10-16) [i386-mswin32]
で試しました。どちらも同じでした。

def mkproc
  code = 0
  proc {|code|}
end
  myproc = mkproc
p myproc
p eval('code', myproc)
p myproc.call(1)
p eval('code', myproc)
# p myproc.instance_eval('code')
p myproc.instance_eval{code}

=begin 実行結果
#<Proc:0x257d8bc>
0
nil
1
proc1.rb:11: undefined local variable or method `code' for
#<Proc:0x257d8bc> (NameError)
	from proc1.rb:11:in `instance_eval'
	from proc1.rb:11:in `instance_eval'
	from proc1.rb:11
=end

----
YOSHIDA Kazuhiro  moriq / moriq.com  http://www.moriq.com/