アイテムが列挙に表示される回数を数えています。
irb(main):003:0> (1..3).reduce(0) {|sum, p| sum += 1 if p == 1}
=> nil
irb(main):004:0> (1..3).find_all{|p| p == 1}.length
=> 1
reduce メソッドは、find_all メソッドと同じ動作をする必要があるようです。nil
の代わりに返されるのはなぜ1
ですか?
irb(main):023:0> (1..3).reduce(0) {|sum, p| sum += 1 if p == 2}
NoMethodError: undefined method `+' for nil:NilClass
from (irb):23:in `block in irb_binding'
from (irb):23:in `each'
from (irb):23:in `reduce'
from (irb):23
from /usr/bin/irb:12:in `<main>'
最初の反復で何かがうまくいかない。このように使用しないだけで削減できますか?