Ruby 1.9のEnumeratorはArray互換メソッドを持つと嬉しい

Ruby 1.9のArray#zipはArrayではなくてEnumerable::Enumeratorを返すようになった。しかも、EnumeratorはArray互換のメソッドを持たないのがタチが悪い。zipをブロックなしで使うことってあるんじゃないかな?
で、思い付いたのが、EnumeratorにArray互換のメソッドを持たせる方法。Module#define_methodと__send__でメソッドの内容を丸投げするのがミソ。

class Enumerable::Enumerator
  (Array.instance_methods - instance_methods ).each do |meth|
    define_method(meth) {|*args,&block|
      to_a.__send__(meth,*args,&block)
    }
  end
end

z = [1,2].zip([3,4])
z.class                         # => Enumerable::Enumerator
z.to_a                          # => [[1, 3], [2, 4]]
z.size                          # => 2
z << "a"                        # => [[1, 3], [2, 4], "a"]

z = [1,2].zip([3,4])
z.each_index{|i| p i }
z.reverse!                      # => [[2, 4], [1, 3]]
z                               # => #<Enumerable::Enumerator:0xb7b53148>
# >> 0
# >> 1