イテレータブロック

rubyのコードを眺めていると '|' で挟まれたへんな部分があることに戸惑う。最初はよくわからなかったのでとりあえず引数のようなものだと理解して適当にサンプルを作ったりしていたのですが、ようやくわかってきました。たとえば以下のサンプルでは関数funcに最大値の引数と一緒に、ブロックも渡しています。


def func( max )
for i in 0..max
yield( i )
end
end
func( 1000 ) { |n| p n }

ブロックは { |n| p n } という部分で、これは yield( i ) という関数で呼び出されます。C言語とかで書くとすれば関数ポインタ作って引数で渡して、それを呼び出す感じになるんでしょう。初めて見たときはなんか意味不明な書き方だなあと思ったりしたけど確かに手軽に書けそうです。なお、イテレータブロックは{}で囲むほかに、do end を使う方法もあります。


def func( max )
for i in 0..max
yield( i )
end
end
func( 1000 ) do |n| p n end