Rubyのyieldの使い方について、しっくり頭に入ってこなかったので記事に書きます!
使い方としては以下の通りです。
yieldを使うと、メソッド名 do ~ endの間の処理がそのまま入るようになります。
def week puts '平日' puts '週末' yield # <- do end の間の処理(puts '一週間')が入る end week do puts '一週間' end # => 平日 # => 週末 # => 一週間
yieldを2回使った場合は以下のとおりです。
def week2nd puts '平日' puts '週末' yield yield end week2nd do puts '一週間' end # => 平日 # => 週末 # => 一週間 # => 一週間
do endの間の処理が2回出力されていますね!
ただし、yieldを使っている場合、do endで値を渡さないとエラーになってしまいます。
week2nd # => ERROR `week2nd': no block given (yield)
その場合は、if block_given?で確認してみましょう。
def week3rd puts '平日' puts '週末' if block_given? yield end end week3rd # => 平日 # => 週末
これだとエラーがでないですね!
また、yieldに引数を渡すことができます。
以下の場合は’一週間’と引数に入れてみます。
week4thを読んだ時、引数の文字列を返すとputs textでputs ‘一週間’というようになります。
また、引数を多く指定した場合はnilと判断されます。
def week4th puts '平日' puts '週末' text = yield '一週間' puts text end week4th do |string| string end # => 平日 # => 週末 # => 一週間 week4th do |text, num| text + num.inspect end # => 平日 # => 週末 # => 一週間nil
yieldはどこで使えるの?と思いますが、
一部共通処理、一部違う処理の場合に使えそうですね!
何か参考になれば幸いです(*^^*)