yieldについて
メソッド呼び出しで渡されたブロックをメソッドの中で実行する際に使用するもの
ある特定の処理をブロックという形でメソッドに渡し、メソッド内の任意のタイミングでそのブロックを実行できる
def yield_test
yield(1,2)
end
yield_test { |a, b| a + b }
=> 3
明示的にブロックを仮引数で受け取り呼び出すこともできる
メソッドの仮引数の最後に&をつけた仮引数を定義することで、メソッド呼び出しの時に渡されたブロックをProcオブジェクトで受け取ることができる
ブロックを受け取る変数は仮引数の一番最後でなければならない
def yield_test(&proc)
proc.call(1,2)
end
yield_test { |a, b| a + b }
=> 3
yieldを使った記法は、このProcオブジェクトを受け取ることを省略した記法である。
def yield_test
if block_given?
yield
else
puts 'ブロックがわたされませんでした。'
end
end
yield_test { puts 'ブロックが渡されました。' }
"ブロックが渡されました。"
yield_test
"ブロックが渡されませんでした。"
block_given?メソッドを使うことができる。
ブロックが渡されれば、trueを返し、渡されなければfalseを返す。