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 件のコメント:
コメントを投稿