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
関連ページ
- Ruby
- Ruby_よく使うのに忘れてしまう基本文法の備忘録
- Rubyのクラスについて
- Rubyのモジュールについて
- Rubyの例外処理について
- RubyのKCODEについて
- Rubyの__send__について
- Rubyのyieldについて