From: Yusuke ENDOH Date: 2009-09-11T21:43:45+09:00 Subject: [ruby-dev:39318] Re: Why doesn't Array#product return Enumerator? 遠藤です。 2009年9月11日7:46 Yukihiro Matsumoto : > |今だって「積」というものではなく配列を返しているのですが、 > |配列はよくても Enumerator はダメなんでしょうか。 > > 配列と配列の積の自然な型は配列なんじゃないでしょうか。 直積集合は順序対の集合のはずなので、順序対を持つコンテナなら なんでもいいかなと思っていました。 あと、Enumerator は LazyArray の段階的導入という認識なので、 効率以外の理由で配列と Enumerator を積極的に区別しようと 思ったことがありませんでした。 > (1) productがブロックを取るようにする。戻り値は配列のまま。 > > です。ブロックを取るメソッドが取らない時にEnumeratorでなく配 > 列を返すのは他と違うと思われそうですが、もともとのルールは > 「ブロックを取らないとエラーになっていたメソッドはEnumerator > を返す」というものだったので、少なくともルール違反ではありま > せん。 ブロックが与えられた時に戻り値が self や nil になるのであれば、 それでも構わないと思います。 > (3) LazyArrayのようなものを作って、product(とcombinationと > permutation)がブロックが与えられない時には、それを返すよ > うにする。 > > というのも考えられますが、よりおおげさですね。 Enumerator は将来 LazyArray に変わっていくと思っているので、 大げさとは感じませんでした。すぐには実装できないと思いますが。 -- Yusuke ENDOH