Ruby Tips!

RubyのTipsを紹介します

ブロックをオプションで取るメソッドを定義する

メソッドが呼び出された時にブロックが渡されたかどうかはblock_given?で判定することができる。これを使えばブロックが渡された場合、渡されなかった場合、両方に対応したメソッドを定義することができる。

def method()
  if block_given?
    # ブロックあり
  else
    # ブロックなし
  end
end

ブロック引数を使ってブロックをProcオブジェクトで受け取るメソッドの場合、ブロックが渡されなかった時、ブロック引数はnilとなる。以下でも同様にブロックが渡された場合、渡されなかった場合の両方にメソッドを対応させることができる。

def method(&blk)
  if blk
    # ブロックあり
  else
    # ブロックなし
  end
end