Rubyのブロックについて
繰り返しメソッドのブロック
ブロックは{ }もしくはdo...endで囲まれた引数のこと。 よく使ってきたのはtimesとかeachとかforメソッドのブロック。
["red","blue","green"].each { |color| puts color }
red blue green
eachメソッドはオブジェクトのすべての要素に対してブロックを実行する。ブロックには各要素が順番に入り、結果を返す。
繰り返しメソッド以外のブロック
ブロックはすべてのメソッドに与えることができるらしい。確認してみる。
def hello p block_given? puts "hello" end hello puts"-------------------------------------" hello{return "here"}
false hello ------------------------------------- true hello
block_given?はブロックが渡されているかをtrueかfalseで返す。 ブロックを渡した2つ目のhelloメソッドにはブロックが渡されていることがわかる。
実際にブロックを呼び出すにはyieldを使う。yieldは入れ替わるみたいな意味。
def hello p block_given? yield puts "hello" end hello{puts "here"}
true here hello
ブロックが呼び出されているのがわかる。