class A
eval 'def f; "hello world"; end'
end
A.new.f # => "hello world"
A.f # NoMethodError: undefined method `f' for A:Class
f # NameError: undefined local variable or method `f' for main:Object
class A
eval 'self', TOPLEVEL_BINDING # => main
end
class A
eval 'def g; "hello world"; end', TOPLEVEL_BINDING
end
g # => "hello world"
A.new.g # NoMethodError: private method `g' called for #<A:0x007f81af845e58>
各位, 我写了一段简单的代码来试试看 TOPLEVEL_BINDING 这个全局常量,上述返回结果绝大多数都是 expected 的,除了最后一个 为什么 g 方法会变成 A 对象的私有方法呢?我之前认为 g 应该仅仅只是 main 下的一个方法才对。而且我之后尝试过
A.new.send(:g) # => "hello world"
可见确实是我定义的那个 g 方法,不知道为什么,只能请教大家了 谢谢