Ruby で #each_with_self を書いてみた

これを簡単に書けるようにしてみたくて書いてみた。

class Enumerator
    def with_self &block
        with_object self, &block
    end
end


module Enumerable
    def each_with_self &block
        each_with_object self, &block
    end
end


[1, 2, 3].each_with_self { |it, myself|
    p "#{it} : #{myself.class}"
}
# =>
# "1 : Array"
# "2 : Array"
# "3 : Array"


p [1, 2, 3].each_with_self.map { |it, myself|
    it + myself.size
}
# => [4, 5, 6]

最初は Enumerator とか使って実装してみたんですが、よくよく考えると Enumerable#each_object_with 使えばいいことに気づいて簡素な実装になりました。
普通に便利そうではある。