2016-01-21 3 views
-7
class Array 
    def sum(start = 0) 
     inject(start, &:+) 
    end 
end 

Пожалуйста, объясните мне использование этого кода. Тестовый корпус с входом и выходом будет полезен. Спасибо.Что делает этот код Ruby с использованием метода инъекций?

+1

Вы спрашиваете кого-то, чтобы сделать свою домашнюю работу для вас? – elc

+0

Нет. Я читаю книгу, где я видел этот фрагмент кода. Автор не дал никакого объяснения кода. Отсюда вопрос! – shreyanshd

+0

Вы прочитали [документацию для инъекций] (http://ruby-doc.org/core-2.2.3/Enumerable.html#method-i-inject) и попробовали код? – mikej

ответ

1

Он суммирует все элементы, которые хранятся внутри массива. start - значение, к которому добавлена ​​сумма. например, для массива foo = [1, 4]; foo.inject(10, &:+) вернет 15 (10 + 1 + 4). &:+ сообщает, какую операцию следует вызывать для каждого элемента массива; это так же, как вы могли бы дать свой собственный обратный вызов, например

foo.inject(10) do |current_sum, current_element| 
    current_sum = current_sum + current_element #can be written current_sum += current_element 
    current_sum 
end 
+0

Получил это. Благодарю. – shreyanshd

+0

FWIW 'current_sum + current_element' - это все, что необходимо в теле блока. –