ふなばです。

>これってなんだか面白そうなんですが,具体的にはどういう動作す
>るんですか?

実はあんまり面白ろくないんですが、lisp  の pairlis とか、haskellなんか
の zip  みたいな感じでしょうか。わたなべさんが説明してくれたとおりなん
ですが。

とくにイテレータと関係があるわけでもないし、これでみんな解決できるわけ
でもなさそうですが、このようにすれば対象はひとつにできてスッキリするし、
each 以外のイテレータにもつかえるわけで、with_index 系の充実をいくらか
でも抑止 (?) するヒントにでもなればいいんですが。

Enumerable として対応するのはちょっと面倒かもしれない。
とりあえず、Array としておためし:

class Array

  def zip(*others)
    co = [self] + others
    xs = []
    for x in 0..(co.collect {|y| y.length}.max - 1)
      ys = []
      co.each do |y|
        ys << y[x]
      end
      xs << ys
    end
    xs
  end

end

このあいだ、わたなべさんがやっていた collects みたいなもの:

p [1,2,3].zip([4,5,6],[7,8,9]).collect {|x|
  sum = 0; x.each {|y| sum += y}; sum
} #=> [12, 15, 18]

--Tadayoshi Funaba