每个都带有Ruby中的对象索引

lee*_*our 0 ruby

我试图迭代一个数组并有条件地增加一个计数器.我使用索引来比较其他数组的元素:

elements.each_with_index.with_object(0) do |(element, index), diff|
  diff += 1 unless other[index] == element
end
Run Code Online (Sandbox Code Playgroud)

diff即使无条件地更改它,我也无法改变价值.这可以通过以下方式解决inject:

elements.each_with_index.inject(0) do |diff, (element, index)|
  diff += 1 unless other[index] == element
  diff
end
Run Code Online (Sandbox Code Playgroud)

但我想知道是否.each_with_index.with_object(0)是一个有效的结构,如何使用它?

tih*_*hom 6

来自ruby docs for each_with_object

请注意,您不能使用数字,true或false等不可变对象作为备忘录.您会认为以下内容返回120,但由于备忘录从未更改过,因此不会.

(1..5).each_with_object(1){| value,memo | 备忘录*=值}#=> 1

因此each_with_object不适用于整数等不可变对象.