0

ブロックなしで条件付きメソッドを呼び出すと、実行できるのに、ブロックを使用する必要があるのはなぜですかif foo? bar.baz

if foo?; bar.each { |n| n.baz } end

また、複数行のブロックで同じことを行うにはどうすればよいですか?

bar.each do |n|
  n.quack
end
4

2 に答える 2

1

これらの構造を使用できますが、上記の方法では判読できません。読めないコードを書くことは避けなければなりません。

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 
于 2012-12-21T09:13:39.447 に答える
1

あなたが提供する最初のバージョンは、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
于 2012-12-21T09:05:34.897 に答える