Суммирование чисел на 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"