次のような結果が得られるメソッドがあります。
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
しかし、もっときれいな方法はありませんか?
はい! :)
def a_method(*params)
# ...
yield if block_given?
# ...
end