Ruby-yieldについて

Rubyのyieldについて

yieldとは

yieldは、引数として渡されたブロックを実行します。

言い換えれば、ブロックに処理を引き渡す役割であり、ブロック部分のコールバックです。

yieldは英語で「産出する、降伏する、譲歩する、(ほかのものに)取って代わられる」など複数の意味がありますが、rubyでの動作は「取って代わられる」という意味が当てはまります。


yieldの注意点

  • yieldはメソッドではなく、Ruby組み込みのキーワードです。
  • メソッド定義の外側にある情報(=ブロック)を暗黙的に利用することとなります。

yieldの実行

メソッド定義の外側にあるブロックを実行します。


#!/usr/bin/ruby

def yield_test
  puts("---------------")
  yield
  puts("---------------")
end

yield_test do
  puts("yield")
end

実行結果は以下のようになります。


$ ruby yield_test.rb 
---------------
yield
---------------

yieldに引数を指定する。

yieldに引数を与えると、yieldに対応するブロックの「ブロック変数」に引数が渡されます。


#!/usr/bin/ruby

def yield_test
  puts("---------------")
  yield(1,2)
  puts("---------------")
end

yield_test do |x,y|
  puts("#{x}+#{y}=#{x+y}")
end

実行結果は以下のようになります。


$ ruby yield_test.rb 
---------------
1+2=3
---------------

block_given?メソッドについて

「block_given?」メソッドを利用することで、ブロックが有無を判断して処理を分岐させることができます。


#!/usr/bin/ruby

def yield_test
  if(block_given?)
    yield
  else
    puts("No block")
  end 
end

yield_test{puts("yield")}
yield_test

実行結果は以下のようになります。


$ ruby yield_test.rb 
yield
No block

関連ページ