看來我們總是可以使用&:+
。爲什麼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'也是一個符號呢? –