rubyのyieldとprocとlambda

2022.07.05

yield

定義したブロック付きメソッドでブロックを呼び出すときに使う。

  • 引数の扱いは緩い
  • Procやlambdaで作成されたオブジェクトもyieldで呼び出すことができる

参考ページ

proc

procの省略形にyieldがある。lambdaとは引数の扱い方やジャンプ構文の挙動に違いがある。

  • ブロックを変数に格納できる
  • 引数の扱いは緩い
  • ブロック内でreturnやbreakをするとブロックを囲んでいるメソッドから抜ける

ブロックをそのままオブジェクトに格納している感覚。

参考ページ

lambda

procとの共通点はブロックを変数に格納できる。だがprocよりも引数の厳密性がありジャンプ構文の挙動にも違いがある。

  • ブロックを変数に格納できる
  • 引数の扱いは厳しい
  • ブロック内でreturnやbreakをするとブロックから抜ける。ブロックを囲んでいるメソッドからは抜けない

ブロックをメソッドに近いものとして扱うようにしている印象。

参考ページ

感想

yieldとlambdaの特徴から、どちらもprocの後発として作られたものという印象を持ちました。