yieldは渡されたブロックを展開する。
- ブロックは引数で明示しなくても良い。
def test(arg) yield(arg) end test ("VALUE") { |v| puts v }
明示的にブロックを渡す
- 引数で明示する場合は、&procをつかい、proc.callでブロックを展開す
- ブロックと通常の引数を両方渡す場合は、通常の引数に()をつける
- ブロックは必ず引数の最後に渡す。
- ブロックは一つしか渡せない。
def test(arg, &block ) block.call(arg) end test ("VALUE") { |v| puts v }
ブロックが渡されたかどうかは、block_given?でチェックできる
- ブロックが渡されなかったら失敗する
def test(arg) if block_given? yield end end