暗黙または明示的にブロックをいつコードするべきかを理解しようとしています。次のコードブロックを考える:暗黙的または明示的なコードブロックを使用する場合
暗黙
def two_times_implicit return "No block" unless block_given? yield yield end puts two_times_implicit { print "Hello "} puts two_times_implicit
明示
def two_times_explicit (&i_am_a_block) return "No block" if i_am_a_block.nil? i_am_a_block.call i_am_a_block.call end puts two_times_explicit { puts "Hello"} puts two_times_explicit
は、他の上で1つを使用してコードすることが望ましいですか?標準的なプラクティスはありますか?誰かが他よりもうまくやって動作するか、まったく動作しない場合がありますか?
[documentation](http://ruby-doc.org/core-2.2.3/doc/syntax/methods_rdoc.html#label-Block+Argument)*によると、「あなたはそうでなければそれを操作したり、明示的なブロックパラメータなしでyieldを使用して別の方法に送信することは望ましくありません。 "* – Stefan
それはたいてい個人的な趣味の好みです。ブロックを変数に格納するか、メソッドに渡す場合は、明示的な '&block'を使用する必要があります。それ以外の場合、ほとんどの人は暗黙的に(より速く)使用しますが、明快さのために明示的に好む場合があります(ほとんどの場合、パフォーマンスの違いはほとんどありません)。 – jrochkind