yield
定義したブロック付きメソッドでブロックを呼び出すときに使う。
- 引数の扱いは緩い
- Procやlambdaで作成されたオブジェクトもyieldで呼び出すことができる
proc
procの省略形にyieldがある。lambdaとは引数の扱い方やジャンプ構文の挙動に違いがある。
- ブロックを変数に格納できる
- 引数の扱いは緩い
- ブロック内でreturnやbreakをするとブロックを囲んでいるメソッドから抜ける
ブロックをそのままオブジェクトに格納している感覚。
lambda
procとの共通点はブロックを変数に格納できる。だがprocよりも引数の厳密性がありジャンプ構文の挙動にも違いがある。
- ブロックを変数に格納できる
- 引数の扱いは厳しい
- ブロック内でreturnやbreakをするとブロックから抜ける。ブロックを囲んでいるメソッドからは抜けない
ブロックをメソッドに近いものとして扱うようにしている印象。
感想
yieldとlambdaの特徴から、どちらもprocの後発として作られたものという印象を持ちました。