evalで式展開がうまく動かない
def foo bar=1 binding end eval "pp bar",foo =># 1
ってやると、ちゃんと動いてくれるのだが
eval "pp #{bar}",foo
ってやると、
undefined local variable or method `foo' for main:Object (NameError)
上記のような、エラーが出てしまい、式展開が出来ない模様。。。
結局ERBを使って置換してやることで解決してみた。
gsubでごりっと置換でもよいのだが、evalで評価される側のコードの正当性を
確保できなくなるのでERBを使うことにした。
require 'erb' class Foo def hoge "hoge" end def get_binding binding end end foo = Foo.new eval ERB.new("p <%= hoge %>").result(foo.get_binding)