define_method 表现出以下行为:
class TestClass
def exec_block(&block) ; yield ; end
end
TestClass.new.send(:exec_block) do ; puts self ; end
# -> main
TestClass.send(:define_method, :bing) do ; puts self ; end
TestClass.new.bing
# -> <TestClass:...>
我不明白的是传递给 define_method 的块应该是一个闭包。因此,它应该(至少根据我的理解)捕获 as 的值,self
如main
调用时所展示的那样exec_block
。
我知道该块将成为该方法的主体,但我不明白该行为的原因。为什么当使用不同的方法时,块会评估不同的东西?
如何使用define_method
其他方法重现块的行为?即我怎么能写exec_block
出来让它输出<TestClass:...>
而不是'main'?