Ruby で ["homu", "mami", "mado"].sum を呼ぶとエラーになる

今日の知見です。
Array#sum メソッドは要素を #+ で結合してその結果を返します。

p [1, 3, 5, 7].sum
# => 16

また Array#sum に引数を渡すことで足し込む値の初期値を指定することもできます。

p [1, 3, 5, 7].sum(100)
# => 116

["homu", "mami", "mado"].sum を呼ぶとエラーになる

では要素が文字列の場合はどうでしょうか。
残念ながら要素が文字列の場合はエラーになってしまいます。

# error: `+': String can't be coerced into Integer (TypeError)
pp ["homu", "mami", "mado"].sum

これは Array#sum が内部で使用している初期値に問題があります。
Array#sum は足し込むときの初期値として 0 を使用しています。
なので最初に足し込む際に 0 + "homu" みたいな処理が実行されてしまいエラーになってしまいます。
これを回避する場合は Array#sum に明示的に初期値 "" を渡すことで回避することができます。

# OK
pp ["homu", "mami", "mado"].sum("")
# => "homumamimado"

# 任意の要素を初期値にもできる
pp ["homu", "mami", "mado"].sum("joined : ")
# => "joined : homumamimado"

なぜエラーになるのかの原因がわかっているならいいんですがいきなり String can't be coerced into Integer (TypeError) ってエラーになってもぎょっとしますよね。
ちなみに単に文字列を結合したい場合は Array#join が利用できます。

pp ["homu", "mami", "mado"].join
# => "homumamimado"