Ruby 为什么reduce的参数按顺序排列?

Ruby 为什么reduce的参数按顺序排列?,ruby,Ruby,我总是忘记ruby()中reduce的参数,它被称为: (5..10).reduce { |sum, n| sum + n } (5..10).reduce(&:+) 累加器首先传入是因为语言设计的原因,还是因为它只是一个任意的选择?JS的工作方式也一样 这主要是为了让你可以做这样的事情: (5..10).reduce { |sum, n| sum + n } (5..10).reduce(&:+) 其中扩展到: (5..10).reduce { |a,b| a.send

我总是忘记ruby()中
reduce
的参数,它被称为:

(5..10).reduce { |sum, n| sum + n }
(5..10).reduce(&:+)

累加器首先传入是因为语言设计的原因,还是因为它只是一个任意的选择?JS的工作方式也一样

这主要是为了让你可以做这样的事情:

(5..10).reduce { |sum, n| sum + n }
(5..10).reduce(&:+)
其中扩展到:

(5..10).reduce { |a,b| a.send(:+, b) } 
这相当于:

(5..10).reduce { |a,b| a + b }

所以这样做是有道理的。注意,如果不是有趣的dup,则顺序与每个对象相关的相反。不过,我想让这件事保持开放,以防有一个原因不仅仅是历史上的原因。我有一种预感,有些东西与函数式编程(curry,partial application)有关,但我不知道。嗨,你能再解释一下什么让你困惑吗?您正在对序列5、6、7、8、9、10调用
reduce
,块的第一次迭代是
5+6
。对我来说,这似乎是完全合乎逻辑的,特别是因为
reduce
的语义本质上是“在所有元素之间插入操作”,即在您的示例中
5+6+7+8+9+10
。@JörgWMittag我不感到困惑,我在寻找参数在函数本身设计中按顺序排列的原因。我可能是错的,但不要认为在Ruby 1.8.7之前引入了
Symbol#to_proc
(从而
&:sym
),这是在选择了
inject
的参数顺序之后很久才发生的。@jordan这是一个有趣的观点,但这可能是目的所在。