injectつづき
すみません。その後、実装自体が不要だということがわかりました。
うーん、Enumerableってeach(とEnumerableで定義されているメソッド)以外を使っていいのかな([]って定義されている保証がなさそう)。でもそうすると以下のような実装になるのかな(to_aとかで一旦配列にするのも効率悪そうだし)。美しくないなぁ。
module Enumerable def inject1 first_f = true result = nil each do |item| if first_f result = item first_f = false else result = yield(result, item) end end result end end p (1 .. 10).to_a.inject1 {|result, item| result + item } # => 55 p (1 .. 20).to_a.inject1 {|result, item| result + item } # => 210