Раздел «Парадигмы».SumProblemRuby:

Суммирование чисел на Ruby. Знакомство с методом inject

В строчке дано несколько чисел. Нужно найти их сумму.

Вот какое решение мог бы написать программист, знакомый с языком Си:

s = 0
gets.split(/\s+/).each { |x|
    s += x.to_f
}
puts s

Возможно, кто-то из них дописал бы метод sum для экземпляров класса Array:

class Array
   def sum
      s = 0;
      for i in 0..size-1
         s += self[i]
      end
      return s
   end
end
puts gets.split(/\s+/).map {|x| x.to_f }.sum

А вот правильное решение:

puts gets.split(/\s+/).map {|x| x.to_f }.inject {|a,i| a + i }

А вот как правильно определять метод sum:

class Array
   def sum
      inject {|a,i| a + i}
   end
end

Метод Array#sum годится не только для чисел:

["abc", "klm", "xyz"].sum #=> "abcklmxyz"