まつもと ゆきひろです

In message "Re: [ruby-dev:39277] Why doesn't Array#product return Enumerator?"
    on Thu, 10 Sep 2009 01:48:38 +0900, Yusuke ENDOH <mame / tsg.ne.jp> writes:

|Array#product は Enumerator でなく配列を返しますが、何か理由が
|あってのことでしょうか。

permutationやcombinationはブロックを受けるのが基本型で、ブロッ
クがない形式では他のメソッドにならいEnumeratorを返しています。
一方、productは(配列として)積を返すのが基本型で、ブロックを受
ける形式はありません。この違いが理由です。

|Array#permutation や combination のように Enumerator を返した方が
|自然かつ便利だと思います。これらのメソッドは brute force 的な探索に
|よく使いますが、product だけ探索前に巨大な配列を確保してしまうので
|いやらしいです。
|
|仕様変更になってしまいますが、一応言ってみました。どうでしょうか。

私自身はこれらのメソッドを使わないので、これらが「自然かつ便
利」かどうか判断できません。ただ、言葉の意味から考えると
productと言われて、積ではなくEnumeratorを返すのはおかしい気が
します。まあ、それならばpermutationやcombinationも十分におか
しいと言われればその通りなんですが。