クロージャの復習
しつこいようだが、もう一度。
- Procを使ったやり方
def closure1 arr, &proc print "start !\n" proc.call arr print "end !\n" end p = Proc.new {|arr| arr.each do |m| puts "put #{m} !" end } @curry = %w{ garlic ginger red-pepper onion tomato spices meat salt carrot potato } closure1 @curry, &p
こんな感じ。
ちなみに、最後の行は、以下のようにも書ける。
- Procを使ったやり方2
closure1(@curry) {|arr| arr.each do |m| puts "put #{m} !" end }
- yieldを使ったやり方
def closure2 arr print "start !\n" yield arr print "end !\n" end @pudding = %w{ egg milk suger vanilla-essence } closure2(@pudding) { @pudding.each {|a| puts "Buy #{a}." } }
ようやく消化できたような。
yieldの場合は即効性、Procやパラメータに&を付ける場合は、汎用性が重視されるときに良さそう。