web-dev-qa-db-ja.com

ブロックが渡されないときに「yield」を防ぐためのより良い方法はありますか?

次のような結果が得られるメソッドがあります。

def a_method(*params)
  # do something
  yield
  # do something else
end

ブロックが渡された場合、このメソッドでブロックを生成する必要があります。また、ブロックが渡されない場合、メソッドは次のようなクラッシュを発生させることなく、yieldセンテンスをスムーズにスキップする必要があります。

 no block given (yield) (LocalJumpError)

もちろん、最も簡単な方法は、メソッドを次のように変更することです。

def a_method(*params, &block)
  # do something
  yield if block
  # do something else
end

しかし、もっときれいな方法はありませんか?

38
Tao

はい! :)

def a_method(*params)
  # ...
  yield if block_given?
  # ...
end
72
Matchu