遠藤です。

2009年9月11日7:46 Yukihiro Matsumoto <matz / ruby-lang.org>:
> |今だって「積」というものではなく配列を返しているのですが、
> |配列はよくても Enumerator はダメなんでしょうか。
>
> 配列と配列の積の自然な型は配列なんじゃないでしょうか。

直積集合は順序対の集合のはずなので、順序対を持つコンテナなら
なんでもいいかなと思っていました。
あと、Enumerator は LazyArray の段階的導入という認識なので、
効率以外の理由で配列と Enumerator を積極的に区別しようと
思ったことがありませんでした。


> (1) productがブロックを取るようにする。戻り値は配列のまま。
>
> です。ブロックを取るメソッドが取らない時にEnumeratorでなく配
> 列を返すのは他と違うと思われそうですが、もともとのルールは
> 「ブロックを取らないとエラーになっていたメソッドはEnumerator
> を返す」というものだったので、少なくともルール違反ではありま
> せん。

ブロックが与えられた時に戻り値が self や nil になるのであれば、
それでも構わないと思います。


> (3) LazyArrayのようなものを作って、product(とcombinationと
>    permutation)がブロックが与えられない時には、それを返すよ
>    うにする。
>
> というのも考えられますが、よりおおげさですね。

Enumerator は将来 LazyArray に変わっていくと思っているので、
大げさとは感じませんでした。すぐには実装できないと思いますが。

-- 
Yusuke ENDOH <mame / tsg.ne.jp>