『はじめてのRuby』読破
と言うことで、ブロック付きメソッド以外は理解したつもり(てか、他の部分は、他の言語を理解できてれば、大丈夫だろう)。
ブロック付きメソッドは、てっきりブロック内部のコードを無名関数として、その無名関数のリファレンスを関数に渡しているのだと認識してた。
イメージ的には(イメージなので、Ruby構文としてあっているかどうかは微妙)、
def method_with_code(code_ref) # 何らかの処理 end list do |x| # 無名関数の本体 end
と思ってたけど、違うのね(どう考えても変だね)。
初めてのRubyの7.3.3 ブロック付きメソッドの定義を見ると、こんな例が載ってある。
def foo_bar_baz yield "foo" # 以下略 end foo_bar_baz do |item| puts item end
お、出てきた"yield"。ふ〜ん、ブロック付きメソッドてのは、ジェネレータなんだ。
上記の文の場合、foo_bar_bazにアクセスして、ジェネレータオブジェクトをもらって、nextメソッドを実行した結果をitemに格納してる、ってことかな?
何となくわかったような、わからないような。。。