rubyでyield、lambda(proc)を使うとき、書き方の組み合わせがいろいろあってこんがらがるので思いつく範囲でまとめてみました。
渡したブロックをdef内のyieldで呼び出すパターン
huga.rb
def huga(arg)
yield(arg)
end
func = lambda{|arg| p arg}
huga("hoge",&func) #=> hoge
huga("hoge"){|arg| p arg} #=> hoge
渡したブロックを&引数で受け取ってcallで呼び出すパターン
hoge.rb
def hoge(arg,&b)
b.call(arg)
end
hoge("hoge"){|arg| p arg} #=> hoge
事前にProc オブジェクトを作っておいて、それを渡すパターン
boo.rb
def boo(arg,b)
b.call(arg)
end
func = lambda{|arg| p arg}
boo("hoge",func) #=> hoge
boo("hoge",lambda{|arg| p arg}) #=> hoge