2013年11月21日木曜日

メソッド定義文を eval する

ruby 1.9.2p180 と 1.9.3p194 で eval の挙動が違っていた。

class Foo
  def eval_(code)
    e_val(code)
  end

  private

  def e_val(code)
    eval code
  end
end

f = Foo.new

code = "def fff; :fff ; end"

f.eval_ code
p f.fff

このコードを走らせると、1.9.2 では f.fff はエラーでとまる。エラーメッセージは fff はプライベートメソッドだからと。確かにメソッド fff は class Foo の private 以下で eval されるので、そうなるのもうなずける。しかし 1.9.3 では f.fff としてもエラーにはならない。

0 件のコメント:

コメントを投稿