为什么`reduce`不评估单个元素数组的块?

Wah*_*eed 1 ruby reduce

我正在尝试使用ruby的reduce方法,这是一个用于枚举操作的好工具.

当数组包含单个元素时,我很难理解为什么下面返回一个字符串而不是一个整数:

["1", "2"].reduce { |sum, i| sum.to_i + i.to_i }
#=> 3 <- expected

["1"].reduce { |sum, i| sum.to_i + i.to_i }
#=> "1" <- not expected, expecting it to be 1
Run Code Online (Sandbox Code Playgroud)

而以下工作如预期:

["1"].reduce(0) { |sum, i| sum.to_i + i.to_i }
#=> 1
Run Code Online (Sandbox Code Playgroud)

我知道在这种情况下我正在初始化值为0的累加器,但我很好奇为什么前一个实现不起作用!

Wah*_*eed 5

好吧,我相信我找到了解释.似乎reduce不会进入reduce方法中定义的块迭代,因为它已经将第一个元素作为累加器,因此数组保持为空,并且不需要进一步的工作,这就是元素将按原样返回的原因.

这完全有道理!否则累加器将被计数两次.

  • 实际上,您不能对单个元素应用二元运算。 (2认同)