Новое для Ruby 2.4.0
Вы можете использовать метко названный метод Enumerable#sum
. Он имеет много преимуществ перед inject(:+)
, но в конце есть несколько важных примечаний, которые нужно прочитать.
Примеры
Диапазоны
(1..100).sum
#=> 5050
Массивы
[1, 2, 4, 9, 2, 3].sum
#=> 21
[1.9, 6.3, 20.3, 49.2].sum
#=> 77.7
Важное примечание
Этот метод не эквивалентен #inject(:+)
. Например
%w(a b c).inject(:+)
#=> "abc"
%w(a b c).sum
#=> TypeError: String can't be coerced into Integer
Кроме того,
(1..1000000000).sum
#=> 500000000500000000 (execution time: less than 1s)
(1..1000000000).inject(:+)
#=> 500000000500000000 (execution time: upwards of a minute)
См. этот ответ для получения дополнительной информации о том, почему sum
такой.