ブロックの内容をメソッドとして持ったオブジェクトを作るメソッド
関数を渡すと、それを持ったオブジェクトが返ってくるわけです。
Rubyってめちゃくちゃ柔軟。素晴らしい。
# 受け取ったブロックをhogeメソッドとして実装したオブジェクトを返す def test(&block) # 受け取ったブロックをhogeメソッドとして実装したModuleを作成する mod = Module.new do define_method("hoge", &block) end # Objectを作り、上で作ったModuleで拡張する obj = Object.new obj.extend(mod) obj end abc = 123 obj = test do # abcは(たぶん)フリー変数なので、アクセスできます。 puts "abc #{abc}" end # hogeを呼んでみる obj.hoge
結果はもちろん、"abc 123"が表示されます。