结论:
[1, 2, 3, 4].inject(0) { |result, element| result + element } # => 10
inject带有一个参数和block。block中的两个参数是有含义的。第一个参数reslut在inject第一次执行block时把inject带的参数付值给它,element就是数组中的元素,该例中inject一共执行4次block,每次执行block完后,最后语句的结果再付值给result,如此循环,直到遍历数组中所有元素。
[1, 2, 3, 4].inject{ |result, element| result + element }
inject可以不带参数,此时result的初始值为数组元素的第一个值。这时执行block的次数为3次。
来源: ruby-inject
Ruby-doc给出的一个示例用法:
# find the longest word
longest = %w{ cat sheep bear }.inject do |memo,word|
memo.length > word.length ? memo : word
end
longest #=> "sheep"