【ruby】yieldとブロックの関係
yield
メソッドの中でyieldを実行すると、受け取ったブロックを実行します。
コード例
ブロックとは method do |ブロック変数| ~ end で囲われている処理のことです。
yieldをわかりやすく明記するためにブロック変数を省略した形で書いてみました。
@count = 1 def yield_test puts @count # a @count += 1 yield # b puts @count # c end #ブロック yield_test do #yield_test実行 → a b cの順に実行される puts @count #b yieldからブロック処理実行 @count += 1 #c @countを1増やされる。 end #1,2,3と出力
yield処理を入れた際はブロック処理をmehodに追加することが出来ます。 追加処理を入れる際、便利な気がします。
ちなみにブロックが渡されたか判別するのは block_given? methodを用います。
@count = 1 def yield_test puts @count # a @count += 1 yield if bloc_given? # true→yield実行 今回はfalseなので実行されない puts @count # c end #ブロック yield_test #1,2と出力