我想使用inject
并将中间值存储在数组中。这是代码:
store_value = []
[1,2,3].inject(0) do |sum, n|
store_value << sum + n
end
我收到此错误:
no implicit conversion of Fixnum into Array (TypeError)
我不明白为什么。为什么这不起作用?
答案 0 :(得分:3)
传递给inject
的块需要返回备忘录(在您的情况下为总和)。附加到数组将返回数组,而不是附加的值。因此,在您的代码中,第一次执行块sum
变为[1],第二次执行sum + n
为[1] + 2
,这会给您错误你看。
通过从块中返回总和来修复它:
store_value = []
[1,2,3].inject(0) do |sum, n|
sum += n
store_value << sum
sum
end
或者使用tap
来阻止追加:
store_value = []
[1,2,3].inject(0) do |sum, n|
(sum + n).tap { |new_sum| store_value << new_sum }
end