From: Daisuke Aoki Date: 2002-11-12T00:11:22+09:00 Subject: [ruby-dev:18745] Re: Enumerable#zip 青木@横浜です。 Shin-ichiro HARA wrote: > >zip が呼ばれた時点で each を呼び出す(終らせる)必要はなく、zip の返り値 > >に対して each が呼び出された時点で(Generator で)並行に進めていけばいい > >ので、そういうものがなくてもなんとかなります。 略 > 青木@横浜さんの each_step.rb は、無限 each を持つクラスに対しては自分 > で next を定義すべし、とあるけど、それはそのクラスの内部に立ち入らない > とできません。この generator.rb は、それが必要ないところがミソですね。 原さんの zip.each の例は(田中さんもそういうのを意図しているんでしょうが) 遅延処理を導入して実現している点で、無理にやっているに過ぎないと 感じます。それを強制するわけではないですけど、 zip は静的な(確定した) 配列を返し、そこで無限ループするというのが自然だと思うのです。 each にからむ遅延処理が Ruby にどう自然にシステマティックに入っていく ことは興味のあるところですけど。 each にしても Continuation を使って強引に分割し next を導入するというのは そういう手段があるということ自体はいいんですが、それが常套手段となるのは 個人的には好きではありません。 以上は、Enumerable に each ではなく next 必須という形じゃないと、 無限 each に対応した並行 each はきれいに感じないという私の個人的な 感情の話でしかないのですけどね。 # each_step.rb に付属してあったソートは二分探索挿入ソートだけど、 # ミスってたりする(^^;; -- 青木大輔