Ruby.new プログラミング Ruby 1.9 - 言語編 - 2章
プログラミング Ruby 1.9 を読み進めて
これまであやふやにして使ってきた部分をメモしていこうと思います。
- 作者: Dave Thomas with Chad Fowler and Andy Hun,まつもとゆきひろ,田和勝
- 出版社/メーカー: オーム社
- 発売日: 2010/05/26
- メディア: 単行本(ソフトカバー)
- 購入: 4人 クリック: 256回
- この商品を含むブログ (25件) を見る
ブロックとイテレータ
メソッドは、自分に関連付けられたブロックを、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:メソッド名の悪さは気にしない