PUROGU LADESU

ポエムがメインのブログです。

【Ruby】関数内でyieldを使う

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

www.sejuku.net