Ruby.new プログラミング Ruby 1.9 - 言語編 - 2章

プログラミング Ruby 1.9 を読み進めて
これまであやふやにして使ってきた部分をメモしていこうと思います。

プログラミングRuby 1.9 −言語編−

プログラミングRuby 1.9 −言語編−

ブロックとイテレータ


メソッドは、自分に関連付けられたブロックを、Rubyのyield文を使って呼び出すことができる。

def greet
  yield
  yield
end

greet { puts "Hi"}
#=> Hi
#=> Hi

単にブロック内の処理を呼び出すだけなので、

greet { %w(apple pear banana).each{|item| puts item}}
#=> apple
#=> pear
#=> banana
#=> apple
#=> pear
#=> banana

とまぁ、単純にイテレータを2回呼び出した結果を得られます*1

ブロック引数を使うと、

def who_say_what
  yield("Dave", "hello")
  yield("Andy", "goodbye")
end

who_say_what {|person, phrase | puts "#{person} says #{phrase}"}
#=> Dave says hello
#=> Andy says goodbye

ブロック内にどんな引数を渡せるのか分かっていれば楽できそう。

これまでEnumerableが...とかProcが...ラムダが...
という文脈ばかりで眺めていたブロックとyield文の関係を
とても平易に書いてくれていたので分かったつもりになれましたよっ。

*1:メソッド名の悪さは気にしない