From: Shin-ichiro HARA Date: 2002-11-08T18:50:56+09:00 Subject: [ruby-dev:18703] Re: Enumerable#zip 原です。 In [ruby-dev:18698] Re: Enumerable#zip Tanaka Akira writes: >> 相変わらず不揃いなデータへの対応の問題は残りますが、それもあり得ますよ >> ね。でもそうすると、a, b, c, ... に Array でなくて、Enumerable を入れ >> たくなりません? > >いれてはいけないんですか? 入れるとなんとなく微妙なことが出てきてしまうので、まつもとさんの案も (Enumerable).zip(Array, Array, ...) なのではないかな。 >zip の場合は、べつに並行に動かなくてもいいのでは? 例えば、each に副作用があるようなケースでですね。ちょっと奇抜な例かも しれませんが、各行 1,2,3,4,... と続く IO オブジェクト io に対しての zip は、Enumerable.zip(io, io) #=> [[1, 2], [3, 4], ...] を期待したく なる気もするわけです。もっとも Enumerable は each の副作用を考えて作ら れるべきでないという話もあるのですが。 >def Enumerable.zip(arg, *args) > result = [] > arg.each {|v| result << [v]} > until args.empty? > arg = args.shift > arg.each_with_index {|v, i| result[i] << v} > end > result >end なるほど。でもこういう実装ならば、やはり Enumerable でなくて、Array に 作るべきかもしれません。 >2. 誰か Enumerable.zip() として適切な挙動を教えてください。 > 例外か [] どちらかだとは思うのですが。 あと、nil っていうのもありますね。本当は、[]、[[]]、[[], []]、 [[], [], []]、... のどれでもいい、という不定なんでしょうけど。