2016-01-21 76 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'是塊體中所有必需的。 –