只今Ruby勉強中

プログラミングRuby―達人プログラマーガイド

うさぎさんと一緒にRubyの勉強をしているオレの記録。

間違ってる所とかいっぱいあると思いますけど、誰でもコメント出来るので気軽に教えて下さい。

普段は 鷹の島 って所で書いてます。

現在のハマリポイント - yield, succ?, Proc & 後で

2006-07-05 (Wed)

ブロックとイテレータ  ブロックとイテレータ - 只今Ruby勉強中 を含むブックマーク

  • うさぎ本: p15-17

やべえ、yield 良くわかんねぇ…。どこかでブロックはクロージャみたいなモノって書いてあるのを見掛けたけど、もっと便利そうなモノに見える、気がする。

とりあえずサンプルをそのままコピったモノ。

irb(main):011:0> def hoge
irb(main):012:1> yield
irb(main):013:1> yield
irb(main):014:1> end
=> nil
irb(main):015:0> hoge { puts 'new' }
new
new
=> nil

hoge メソッドを実行すると、ブロックの中身が二回実行されるって寸法。

ここもうちょっと掘り下げねば。

yield  yield - 只今Ruby勉強中 を含むブックマーク

tDiary のソースをゲットして来て眺めていた*1ら、何となくわかってきた。

yield はこんな風に入っていて。

def each_comment( limit = 3 )
   @comments.each_with_index do |com,idx|
      break if idx >= limit
      yield com
   end
end

こんな風に使われていた。

@diary.each_comment( 100 ) do |com|
   com.show = @cgi.params[(idx += 1).to_s][0] == 'true' ? true : false;
end

コメントの配列にたいして処理を実行するって感じか。他にもトラックバックの配列用も用意されていたりした。この例だと each 系で扱う判定の処理を一ヶ所にまとめちゃえるって事か。確かに便利だ。でも何か自分で思い付けないような気がするなぁ…。

*1:我ながらマニアックな事をするねえ

トラックバック - http://rubyist.g.hatena.ne.jp/gaba/20060705