ブロックをProcに渡すことができるかどうか疑問に思っています。単にブロックを渡すだけでProc.call
は機能しません:
foo = Proc.new {
yield
}
foo.call {
puts "test"
}
結果:
LocalJumpError: ブロックが指定されていません (yield)
同じことがラムダでも起こります。ただし、これはメソッド オブジェクトで機能します。
class Foo
def bar
yield
end
end
bar = Foo.new.method :bar
bar.call { puts "Success!" }
結果:
成功!
奇妙なことに、メソッド オブジェクトを proc に変換した後も機能します。
bar.to_proc.call { puts "Success!" }
結果:
成功!
では、なぜブロックから作られた Proc はブロックを受け入れないのに、もともとメソッドだった Proc はブロックを受け入れるのでしょうか? ブロックを受け入れるブロックから Proc を作成することは可能ですか?