看来我们总是可以使用&:+
。为什么inject
需要:+
而map
必须采取&:to_s
?如果原因是map
不能采取符号,但必须采取一个块,那么如果map
也需要一个符号是否有意义?为什么我们可以说`arr.inject(:+)`,但不得不说`arr.map(&:to_s)`?
[1,3,5].inject(:+) # => 9
[1,3,5].inject(&:+) # => 9
[1,3,5].map(&:to_s) # => ["1", "3", "5"]
[1,3,5].map(:to_s) # => ArgumentError: wrong number of arguments (1 for 0)
@ user2864740我在另一篇文章中看到,':to_s'返回块 –
考虑,你可以写'arr.inject(:+)'或'arr.inject(:+)',考虑改变你的问题是为什么[Enumerable#map](http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-map)没有允许参数为符号的表单,作为[Enumerable#inject](http://ruby-doc.org/core-2.2.0/Enumerable.html#method-i-inject)(又名'reduce')。这不是你的意思吗? –
是的,如果'inject'可以带一个符号,那么为什么它不是,至少在上面的例子中,'map'也是一个符号呢? –