我正在計算項目在枚舉中出現的次數。總計減少回報無
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>'
第一次迭代中出現問題。只能減少這種方式嗎?
當'p'不是'1'時,如果p == 1,sum + = 1的結果是'nil'。該塊的結果被賦予'sum',所以nils覆蓋了你的'sum'值。 – oldergod