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に渡されたブロックがクロージャであると想定されているということです。そのため、(少なくとも私の理解によれば)を呼び出すときに示されるように、asself
の値をキャプチャする必要があります。main
exec_block
ブロックがメソッドの本体になることは理解していますが、動作の理由はわかりません。さまざまな方法で使用したときに、ブロックがさまざまなものに評価されるのはなぜですか?
他の方法でブロックの動作を再現するにはどうすればよいdefine_method
ですか?つまり、 `main´の代わりにexec_block
出力するように書くにはどうすればよいですか?<TestClass:...>