ブロックなしで条件付きメソッドを呼び出すと、実行できるのに、ブロックを使用する必要があるのはなぜですかif foo? bar.baz
。
if foo?; bar.each { |n| n.baz } end
また、複数行のブロックで同じことを行うにはどうすればよいですか?
bar.each do |n|
n.quack
end
ブロックなしで条件付きメソッドを呼び出すと、実行できるのに、ブロックを使用する必要があるのはなぜですかif foo? bar.baz
。
if foo?; bar.each { |n| n.baz } end
また、複数行のブロックで同じことを行うにはどうすればよいですか?
bar.each do |n|
n.quack
end
これらの構造を使用できますが、上記の方法では判読できません。読めないコードを書くことは避けなければなりません。
if true then [1, 2].map { |n| n * 2 } end
=> [2, 4]
[1, 2].map do |n|
n * 2
end if true
=> [2, 4]
[1, 2].map do |n|
n * 2
end if false
=> nil
あなたが提供する最初のバージョンは、bar.each 実行の結果を foo? に渡します。それはfooを期待していますか?議論をする。
2 番目のバージョンは true のbar.each
場合にのみ実行されます。foo?
次のスタイルを使用することをお勧めします。
if foo?
bar.each do |n|
n.quack
end
end
最後の質問にも答えます。
foo?
注:ブロックの実行結果である単一の引数を に渡すことが実際に予想される場合は、ヘルパー変数を使用することをお勧めします。
cond = bar.each do |n|
n.quack
end
if foo? cond
.. do stuff
end