我正在计算一个项目在枚举中出现的次数。
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>'
在第一次迭代中出现了问题。可以减少只是不使用这种方式吗?