LoginSignup
1
2

More than 5 years have passed since last update.

[Ruby][初心者] yieldについて

Last updated at Posted at 2018-10-06

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を返す。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2