sum(init=0) -> object[permalink][rdoc]sum(init=0) {|e| expr } -> object要素の合計を返します。
ブロックが与えられた場合、加算する前に各要素にブロックが適用されます。
selfが空の場合、initを返します。
例:
{ 1 => 10, 2 => 20 }.sum {|k, v| k * v }  # => 50
(1..10).sum                               # => 55
(1..10).sum {|v| v * 2 }                  # => 110
[Object.new].each.sum                     # => TypeError
init 引数を明示的に指名すると数値以外のオブジェクトにも使えます。
例:
{ 1 => 10, 2 => 20 }.sum([])                   #=> [1, 10, 2, 20]
"a\nb\nc".each_line.lazy.map(&:chomp).sum("")  #=> "abc"
[[1], [[2]], [3]].sum([])          #=> [1, [2], 3]
"+" メソッドが再定義されている場合、Enumerable#sum は再定義を無視することがあります(例えばInteger#+)。
[SEE_ALSO] Array#sum