# Why doesn't Array#product return Enumerator?

**URL:** <https://www.ruby-forum.com/t/why-doesnt-array-product-return-enumerator/175209>\
**Category:** Development\
**Created:** [September 9, 2009, 6:49pm UTC](https://www.ruby-forum.com/t/why-doesnt-array-product-return-enumerator/175209 "2009-09-09T18:49:18Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [September 9, 2009, 6:49pm UTC](https://www.ruby-forum.com/t/why-doesnt-array-product-return-enumerator/175209/1 "2009-09-09T18:49:18Z")

</div>

e$B1sF#$G$9!#e(B

Array#product e$B$Oe(B Enumerator  
e$B$G$J$/G[Ns$rJV$7$^$9$,!“2?$+M}M3$,e(B  
e$B$”$C$F$N$3$H$G$7$g$&$+!#e(B

Array#permutation e$B$de(B combination e$B$N$h$&$Ke(B Enumerator  
e$B$rJV$7$?J}$,e(B  
e$B\<+A3$+$DJXMx$@$H;W$$$^$9!#$3$l$i$N%a%=%C%I$Oe(B brute force  
e$BE\*$JC5:w$Ke(B  
e$B$h$/;H$$$^$9$,!"e(Bproduct  
e$B$@$1C5:wA0$K5pBg$JG[Ns$r3NJ]$7$F$7$^$&$N$Ge(B  
e$B$$$d$i$7$$$G$9!#e(B

e$B;EMMJQ99$K$J$C$F$7$^$$$^$9$,!"0l1~8@$C$F$\_$^$7$?!#$I$&$G$7$g$&$+!#e(B

# Index: array.c

— array.c (revision 24823)  
+++ array.c (working copy)  
@@ -3858,30 +3858,35 @@

- call-seq:
- 

```
ary.product(other_ary, ...)

```

- 

- 
  - Returns an array of all combinations of elements from all arrays.

- 
  - The length of the returned array is the product of the length

- 
  - of ary and the argument arrays

- 
  - When invoked with a block, yields all combinations of elements

- 
  - from all arrays.
  - 

- 
  - 

```
[1,2,3].product([4,5]) # => 

```

[[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]

- 
  - 

```
[1,2].product([1,2]) # => [[1,1],[1,2],[2,1],[2,2]]

```

- 
  - 

```
[1,2].product([3,4],[5,6]) # => 

```

[[1,3,5],[1,3,6],[1,4,5],[1,4,6],

- 
  - 

```
                           # 

```

[2,3,5],[2,3,6],[2,4,5],[2,4,6]]

- 
  - 

```
[1,2].product() # => [[1],[2]]

```

- 
  - 

```
[1,2].product([]) # => []

```

- 
  - When invoked without a block, returns an enumerator object instead.

- 
  - 

- 
  - 

```
[1,2,3].product([4,5]).to_a # =>

```

[[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]]

- 
  - 

```
[1,2].product([1,2]).to_a # => [[1,1],[1,2],[2,1],[2,2]]

```

- 
  - 

```
[1,2].product([3,4],[5,6]).to_a # => 

```

[[1,3,5],[1,3,6],[1,4,5],[1,4,6],

- 
  - 

```
                                # 

```

[2,3,5],[2,3,6],[2,4,5],[2,4,6]]

- 
  - 

```
[1,2].product().to_a # => [[1],[2]]

```

- 
  - 

```
[1,2].product([]).to_a # => []

```

\*/

static VALUE  
rb\_ary\_product(int argc, VALUE _argv, VALUE ary)  
{  
int n = argc+1; /_ How many arrays we’re operating on \*/

- volatile VALUE t0 = tmpbuf(n, sizeof(VALUE));
- volatile VALUE t1 = tmpbuf(n, sizeof(int));
- VALUE _arrays = (VALUE_)RSTRING\_PTR(t0); /\* The arrays we’re  
computing the product of \*/
- int _counters = (int_)RSTRING\_PTR(t1); /\* The current position in  
each one \*/
- VALUE result; /\* The array we’ll be returning \*/

- volatile VALUE t0, t1;

- VALUE \*arrays;

- int \*counters;  
long i,j;  
long resultlen = 1;

- RETURN\_ENUMERATOR(ary, argc, argv);

- t0 = tmpbuf(n, sizeof(VALUE));

- t1 = tmpbuf(n, sizeof(int));

- arrays = (VALUE\*)RSTRING\_PTR(t0); /\* The arrays we’re computing  
the product of \*/

- counters = (int\*)RSTRING\_PTR(t1); /\* The current position in each  
one \*/

- RBASIC(t0)-\>klass = 0;  
RBASIC(t1)-\>klass = 0;

@@ -3903,7 +3908,6 @@  
}

```
 /* Otherwise, allocate and fill in an array of results */

```

- result = rb\_ary\_new2(resultlen);  
for (i = 0; i \< resultlen; i++) {  
int m;  
/\* fill in one subarray \*/  
@@ -3913,7 +3917,7 @@  
}

/\* put it on the result array \*/

- rb\_ary\_push(result, subarray);

- rb\_yield(subarray);

- return result;

- return ary;  
}

# /\* Index: test/ruby/test\_array.rb

— test/ruby/test\_array.rb (revision 24823)  
+++ test/ruby/test\_array.rb (working copy)  
@@ -1306,14 +1306,14 @@

def test\_product  
assert\_equal(@cls[[1,4],[1,5],[2,4],[2,5],[3,4],[3,5]],

- 

```
            @cls[1,2,3].product([4,5]))

```

- assert\_equal(@cls[[1,1],[1,2],[2,1],[2,2]],  
@cls[1,2].product([1,2]))

- 

```
            @cls[1,2,3].product([4,5]).to_a)

```

- assert\_equal(@cls[[1,1],[1,2],[2,1],[2,2]],  
@cls[1,2].product([1,2]).to\_a)

- 

```
            @cls[1,2].product([3,4],[5,6]))

```

- assert\_equal(@cls[[1],[2]], @cls[1,2].product)
- assert\_equal(@cls[], @cls[1,2].product([]))

- 

```
            @cls[1,2].product([3,4],[5,6]).to_a)

```

- assert\_equal(@cls[[1],[2]], @cls[1,2].product.to\_a)
- assert\_equal(@cls[], @cls[1,2].product([]).to\_a)  
end

def test\_permutation

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [September 10, 2009, 3:40pm UTC](https://www.ruby-forum.com/t/why-doesnt-array-product-return-enumerator/175209/2 "2009-09-10T15:40:54Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:39277] Why doesn’t Array#product return  
Enumerator?”  
on Thu, 10 Sep 2009 01:48:38 +0900, Yusuke ENDOH [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
writes:

|Array#product e$B$Oe(B Enumerator e$B$G$J$/G[Ns$rJV$7$^$9$,!“2?$+M}M3$,e(B  
|e$B$”$C$F$N$3$H$G$7$g$&$+!#e(B

permutatione$B$de(Bcombinatione$B$O%V%m%C%/$r\<u$1$k$N$,4pK\7?$G!“%V%m%Ce(B  
e$B%/$,$J$$7A\<0$G$OB\>$N%a%=%C%I$K$J$i$$e(BEnumeratore$B$rJV$7$F$$$^$9!#e(B  
e$B0lJ}!“e(Bproducte$B$Oe(B(e$BG[Ns$H$7$Fe(B)e$B@Q$rJV$9$N$,4pK\7?$G!”%V%m%C%/$r\<ue(B  
e$B$1$k7A\<0$O$”$j$^$;$s!#$3$N0c$$$,M}M3$G$9!#e(B

|Array#permutation e$B$de(B combination e$B$N$h$&$Ke(B Enumerator e$B$rJV$7$?J}$,e(B  
|e$B\<+A3$+$DJXMx$@$H;W$$$^$9!#$3$l$i$N%a%=%C%I$Oe(B brute force e$BE\*$JC5:w$Ke(B  
|e$B$h$/;H$$$^$9$,!"e(Bproduct e$B$@$1C5:wA0$K5pBg$JG[Ns$r3NJ]$7$F$7$^$&$N$Ge(B  
|e$B$$$d$i$7$$$G$9!#e(B  
|  
|e$B;EMMJQ99$K$J$C$F$7$^$$$^$9$,!"0l1~8@$C$F$\_$^$7$?!#$I$&$G$7$g$&$+!#e(B

e$B;d\<+?H$O$3$l$i$N%a%=%C%I$r;H$o$J$$$N$G!"$3$l$i$,!V\<+A3$+$DJXe(B  
e$BMx!W$+$I$&$+H=CG$G$-$^$;$s!#$?$@!“8@MU$N0UL#$+$i9M$($k$He(B  
producte$B$H8@$o$l$F!”@Q$G$O$J$/e(BEnumeratore$B$rJV$9$N$O$_$+$7$$5$$,e(B  
e$B$7$^$9!#$^$“!”$=$l$J$i$Pe(Bpermutatione$B$de(Bcombinatione$B$b==J,$K$_$+e(B  
e$B$7$$$H8@$o$l$l$P$=$NDL$j$J$s$G$9$,!#e(B

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [September 10, 2009, 4:53pm UTC](https://www.ruby-forum.com/t/why-doesnt-array-product-return-enumerator/175209/3 "2009-09-10T16:53:28Z")

</div>

e$B1sF#$G$9!#e(B

2009e$BG/e(B9e$B7ne(B10e$BF|e(B22:39 Yukihiro M.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> e$B0lJ}!“e(Bproducte$B$Oe(B(e$BG[Ns$H$7$Fe(B)e$B@Q$rJV$9$N$,4pK\7?$G!”%V%m%C%/$r\<ue(B  
> e$B$1$k7A\<0$O$"$j$^$;$s!#$3$N0c$$$,M}M3$G$9!#e(B

e$B$&!"K\Ev$KJ9$-$?$+$C$?$N$O!V$J$s$Ge(B product e$B$@$1e(B permutation  
e$B$?$A$H0c$&%$%s%?!\<%U%'%$%9$K$J$C$F$$$k$N$+!W$G$9!#e(B

> |Array#permutation e$B$de(B combination e$B$N$h$&$Ke(B Enumerator e$B$rJV$7$?J}$,e(B  
> |e$B\<+A3$+$DJXMx$@$H;W$$$^$9!#$3$l$i$N%a%=%C%I$Oe(B brute force e$BE\*$JC5:w$Ke(B  
> |e$B$h$/;H$$$^$9$,!"e(Bproduct e$B$@$1C5:wA0$K5pBg$JG[Ns$r3NJ]$7$F$7$^$&$N$Ge(B  
> |e$B$$$d$i$7$$$G$9!#e(B  
> |  
> |e$B;EMMJQ99$K$J$C$F$7$^$$$^$9$,!"0l1~8@$C$F$\_$^$7$?!#$I$&$G$7$g$&$+!#e(B
> 
> e$B;d\<+?H$O$3$l$i$N%a%=%C%I$r;H$o$J$$$N$G!"$3$l$i$,!V\<+A3$+$DJXe(B  
> e$BMx!W$+$I$&$+H=CG$G$-$^$;$s!#e(B

e$B!V\<+A3!W$H$$$&$N$Oe(B permutation e$B$de(B combination  
e$B$HF1$8$@$+$i$G$9e(B  
(e$B\>e$NJ8$O$A$g$C$HO@M}$,JQ$G$7$?e(B)  
e$B!#\<+A3$H8@$&$+0l4S@-$G$9$M!#e(B

e$B$"$H!"5pBg$J@Q$re(B each  
e$B$7$?$$\>l9g$K!VJXMx!W$G$9!#$=$&$$$&\>l9g$Oe(B  
e$B%Q%:%k$r2r$/\>l9g$dAmEv$j%F%9%H$r$9$k\>l9g$K$=$3$=$3H/@8$7$^$9!#e(B  
e$B$$$-$J$jG[Ns$rJV$9$N$@$H!"e(Beach e$B$7;O$a$kA0$K5pBg$JG[Ns$,3NJ]e(B  
e$B$5$l$F$7$^$$$^$9!#e(Bproduct e$B$,%V%m%C%/$r\<u$1\<h$C$F$/$l$l$P$3$Ne(B  
e$BLdBj$O$J$/$J$j$^$9!#=\>Mh$I$\*$jG[Ns$,$[$7$$$J$ie(B .to\_a  
e$B$9$k$@$1e(B  
e$B$G$G$-$^$9!#e(B

> e$B$?$@!“8@MU$N0UL#$+$i9M$($k$He(B  
> producte$B$H8@$o$l$F!”@Q$G$O$J$/e(BEnumeratore$B$rJV$9$N$O$_$+$7$$5$$,e(B  
> e$B$7$^$9!#$^$“!”$=$l$J$i$Pe(Bpermutatione$B$de(Bcombinatione$B$b==J,$K$_$+e(B  
> e$B$7$$$H8@$o$l$l$P$=$NDL$j$J$s$G$9$,!#e(B

e$B:#$@$C$F!V@Q!W$H$$$&$b$N$G$O$J$/G[Ns$rJV$7$F$$$k$N$G$9$,!"e(B  
e$BG[Ns$O$h$/$F$be(B Enumerator e$B$O%@%a$J$s$G$7$g$&$+!#e(B

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [September 11, 2009, 2:50pm UTC](https://www.ruby-forum.com/t/why-doesnt-array-product-return-enumerator/175209/4 "2009-09-11T14:50:07Z")

</div>

e$B1sF#$G$9!#e(B

2009e$BG/e(B9e$B7ne(B11e$BF|e(B7:46 Yukihiro M.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> |e$B:#$@$C$F!V@Q!W$H$$$&$b$N$G$O$J$/G[Ns$rJV$7$F$$$k$N$G$9$,!"e(B  
> |e$BG[Ns$O$h$/$F$be(B Enumerator e$B$O%@%a$J$s$G$7$g$&$+!#e(B
> 
> e$BG[Ns$HG[Ns$N@Q$N\<+A3$J7?$OG[Ns$J$s$8$c$J$$$G$7$g$&$+!#e(B

e$BD\>@Q=89g$O=g=xBP$N=89g$N$O$:$J$N$G!“=g=xBP$r;}$D%3%s%F%J$J$ie(B  
e$B$J$s$G$b$$$$$+$J$H;W$C$F$$$^$7$?!#e(B  
e$B$”$H!“e(BEnumerator e$B$Oe(B LazyArray  
e$B$NCJ3,E_F3F~$H$$$&G’\<1$J$N$G!"e(B  
e$B8zN(0J30$NM}M3$GG[Ns$He(B Enumerator e$B$r@Q6KE_$K6hJL$7$h$&$He(B  
e$B;W$C$?$3$H$,$”$j$^$;$s$G$7$?!#e(B

> (1) producte$B$,%V%m%C%/$r\<h$k$h$&$K$9$k!#La$jCM$OG[Ns$N$^$^!#e(B
> 
> e$B$G$9!#%V%m%C%/$r\<h$k%a%=%C%I$,\<h$i$J$$;~$Ke(BEnumeratore$B$G$J$/G[e(B  
> e$BNs$rJV$9$N$OB\>$H0c$&$H;W$o$l$=$&$G$9$,!“$b$H$b$H$N%k!\<%k$Oe(B  
> e$B!V%V%m%C%/$r\<h$i$J$$$H%(%i!\<$K$J$C$F$$$?%a%=%C%I$Oe(BEnumerator  
> e$B$rJV$9!W$H$$$&$b$N$@$C$?$N$G!”\>/$J$/$H$b%k!\<%k0cH?$G$O$"$j$^e(B  
> e$B$;$s!#e(B

e$B%V%m%C%/$,M?$($i$l$?;~$KLa$jCM$,e(B self e$B$de(B nil  
e$B$K$J$k$N$G$"$l$P!"e(B  
e$B$=$l$G$b9=$o$J$$$H;W$$$^$9!#e(B

> (3) LazyArraye$B$N$h$&$J$b$N$r:n$C$F!“e(Bproduct(e$B$He(Bcombinatione$B$He(B  
> permutation)e$B$,%V%m%C%/$,M?$($i$l$J$$;~$K$O!”$=$l$rJV$9$he(B  
> e$B$&$K$9$k!#e(B
> 
> e$B$H$$$&$N$b9M$($i$l$^$9$,!"$h$j$_$_$2$5$G$9$M!#e(B

Enumerator e$B$O\>-Mhe(B LazyArray e$B$KJQ$o$C$F$$$/$H;W$C$F$$$k$N$G!"e(B  
e$BBg$2$5$H$O46$8$^$;$s$G$7$?!#$9$0$K$O\<BAu$G$-$J$$$H;W$$$^$9$,!#e(B

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [September 11, 2009, 12:47am UTC](https://www.ruby-forum.com/t/why-doesnt-array-product-return-enumerator/175209/5 "2009-09-11T00:47:06Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:39299] Re: Why doesn’t Array#product return  
Enumerator?”  
on Thu, 10 Sep 2009 23:52:44 +0900, Yusuke ENDOH [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
writes:

|e$B$&!"K\Ev$KJ9$-$?$+$C$?$N$O!V$J$s$Ge(B product e$B$@$1e(B permutation  
|e$B$?$A$H0c$&%$%s%?!\<%U%'%$%9$K$J$C$F$$$k$N$+!W$G$9!#e(B

e$B$9$G$K=R$Y$?DL$j!“!Ve(Bproducte$B$H$$$&C18l$O@Q$rJV$9$3$H$r4|BT$5e(B  
e$B$;$k$,!”$=$NI=8=$H$7$Fe(BEnumeratore$B$OE,@Z$G$J$$$h$&$K;W$($k!W$He(B  
e$B$$$&$b$N$G$9!#$^$?!“$=$l$KBP$7$F!Ve(Bcombinatione$B$de(Bpermutatione$B$@$Ce(B  
e$B$FF1MM$@!W$H$$$&H?O@$OEvA3$”$j$($k$HG’\<1$7$F$$$^$9!#e(B

e$BK\Ev$Oe(Bcombinatione$B$J$I$bG[Ns$rJV$7$?$+$C$?$N$G!":#$N\>uBV$,M}e(B  
e$BA[$G$J$$$N$OG’$a$^$9!#$3$NJU$r8+Mn$H$7$F$$$?$N$ODK$$\<:GT$G$9!#e(B

|e$B$"$H!"5pBg$J@Q$re(B each e$B$7$?$$\>l9g$K!VJXMx!W$G$9!#$=$&$$$&\>l9g$Oe(B  
|e$B%Q%:%k$r2r$/\>l9g$dAmEv$j%F%9%H$r$9$k\>l9g$K$=$3$=$3H/@8$7$^$9!#e(B  
|e$B$$$-$J$jG[Ns$rJV$9$N$@$H!"e(Beach e$B$7;O$a$kA0$K5pBg$JG[Ns$,3NJ]e(B  
|e$B$5$l$F$7$^$$$^$9!#e(Bproduct e$B$,%V%m%C%/$r\<u$1\<h$C$F$/$l$l$P$3$Ne(B  
|e$BLdBj$O$J$/$J$j$^$9!#=\>Mh$I$\*$jG[Ns$,$[$7$$$J$ie(B .to\_a e$B$9$k$@$1e(B  
|e$B$G$G$-$^$9!#e(B

|e$B:#$@$C$F!V@Q!W$H$$$&$b$N$G$O$J$/G[Ns$rJV$7$F$$$k$N$G$9$,!"e(B  
|e$BG[Ns$O$h$/$F$be(B Enumerator e$B$O%@%a$J$s$G$7$g$&$+!#e(B

e$BG[Ns$HG[Ns$N@Q$N\<+A3$J7?$OG[Ns$J$s$8$c$J$$$G$7$g$&$+!#e(Bto\_ae$B$9e(B  
e$B$l$P$h$$$H$O$_$C$7$c$$$^$9$,!"35G0E_$K0c$&$b$N$rJV$9$3$H$r@Qe(B  
e$B6KE\*$K?d\>)$9$k$K$ODq93$,$"$j$^$9!#@Q$G$O$J$/!"MWAG$NAH$\_9g$oe(B  
e$B$;$NNs$rJV$9$H9M$($l$P$h$$$N$G$7$g$&$,!#$=$l$H$b;d$,M}2r$7$Fe(B  
e$B$J$$$@$1$G!"G[Ns$N@Q$C$F$=$&$$$&$b$N!)e(B

e$B$G!"Ds0F$9$k$N$Oe(B

(1) producte$B$,%V%m%C%/$r\<h$k$h$&$K$9$k!#La$jCM$OG[Ns$N$^$^!#e(B

e$B$G$9!#%V%m%C%/$r\<h$k%a%=%C%I$,\<h$i$J$$;~$Ke(BEnumeratore$B$G$J$/G[e(B  
e$BNs$rJV$9$N$OB\>$H0c$&$H;W$o$l$=$&$G$9$,!“$b$H$b$H$N%k!\<%k$Oe(B  
e$B!V%V%m%C%/$r\<h$i$J$$$H%(%i!\<$K$J$C$F$$$?%a%=%C%I$Oe(BEnumerator  
e$B$rJV$9!W$H$$$&$b$N$@$C$?$N$G!”\>/$J$/$H$b%k!\<%k0cH?$G$O$"$j$^e(B  
e$B$;$s!#e(B

e$B$D$$$G$Ke(B

(2) combinatione$B$He(Bpermutatione$B$b%V%m%C%/$,$J$1$l$PG[Ns$rJV$9$he(B  
e$B$&$K$9$ke(B

e$B$bDs0F$7$?$$$H$3$m$G$9$,!“$3$A$i$OHs8\_49$J$s$G!”$9$0$K$H$$$&e(B  
e$B$o$1$K$O$$$+$J$$$+$b$7$l$^$;$s!#e(B

e$BJL0F$H$7$F$Oe(B

(3)  
LazyArraye$B$N$h$&$J$b$N$r:n$C$F!“e(Bproduct(e$B$He(Bcombinatione$B$He(B  
permutation)e$B$,%V%m%C%/$,M?$($i$l$J$$;~$K$O!”$=$l$rJV$9$he(B  
e$B$&$K$9$k!#e(B

e$B$H$$$&$N$b9M$($i$l$^$9$,!"$h$j$_$_$2$5$G$9$M!#e(B

```
                            e$B$^$D$b$He(B e$B$f$-$R$me(B /:|)

```

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [March 30, 2010, 6:44pm UTC](https://www.ruby-forum.com/t/why-doesnt-array-product-return-enumerator/175209/6 "2010-03-30T18:44:01Z")

</div>

e$B1sF#$G$9!#e(B

2009e$BG/e(B9e$B7ne(B12e$BF|e(B7:51 Yukihiro M.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> e$B$U$`!#e(B
> 
> |e$BBg$2$5$H$O46$8$^$;$s$G$7$?!#$9$0$K$O\<BAu$G$-$J$$$H;W$$$^$9$,!#e(B
> 
> e$B$=$l$Oe(BLazyArraye$B$,$G$-$k$^$Ge(Bproducte$B$NJQ99$OBT$F$k$H$$$&0UL#$Ge(B  
> e$B$9$+!#e(B

e$B$9$\_$^$;$s!"$3$N%a!\<%k$KJV?.$7$F$$$J$$$3$H$K:#995$$,$D$-$^$7$?!#e(B

LazyArray e$B$OF3F~$N8+9~$\_$,Gv$/$J$C$?$HJ9$$$?$N$G!"$=$l$J$ie(B (1)  
e$B$,e(B  
e$B$$$$$+$J$H;W$$$^$9!#e(B

e$B@dL/$J%?%$%\_%s%0$Ge(B Feature #3021 [ruby-core:29045] e$B$Ge(B (1)  
e$B$HF1$8e(B  
e$BDs0F$,$J$5$l$F$$$ke(B  
(e$B$H$$$&$+$=$l$r8+$F$3$N%a!\<%k$r;W$$=P$7$?e(B) e$B$N$Ge(B  
e$B\>5G’$rD:$1$k$H4r$7$$$G$9!#e(B1.9.2  
e$B$KF~$k$?$a$K$O:#F|Cf$G$9$,!D!D!#e(B

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [September 12, 2009, 12:54am UTC](https://www.ruby-forum.com/t/why-doesnt-array-product-return-enumerator/175209/7 "2009-09-12T00:54:49Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:39318] Re: Why doesn’t Array#product return  
Enumerator?”  
on Fri, 11 Sep 2009 21:43:45 +0900, Yusuke ENDOH [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
writes:

|\> e$BG[Ns$HG[Ns$N@Q$N\<+A3$J7?$OG[Ns$J$s$8$c$J$$$G$7$g$&$+!#e(B  
|  
|e$BD\>@Q=89g$O=g=xBP$N=89g$N$O$:$J$N$G!"=g=xBP$r;}$D%3%s%F%J$J$ie(B  
|e$B$J$s$G$b$$$$$+$J$H;W$C$F$$$^$7$?!#e(B

e$B$U$`!#e(B

|e$B$"$H!“e(BEnumerator e$B$Oe(B LazyArray e$B$NCJ3,E_F3F~$H$$$&G’\<1$J$N$G!"e(B  
|e$B8zN(0J30$NM}M3$GG[Ns$He(B Enumerator e$B$r@Q6KE_$K6hJL$7$h$&$He(B  
|e$B;W$C$?$3$H$,$”$j$^$;$s$G$7$?!#e(B

e$B$d$O$je(BEnumeratore$B$He(BLazyArraye$B$O0c$&$b$N$@$H;W$$$^$9$h!#e(B  
Enumeratore$B$O%7!\<%1%s%7%c%k$J%“%/%;%9$7$+5v$7$^$;$s$7!”?6$kIqe(B  
e$B$$e(B(e$B%a%=%C%Ie(B)e$B$b$+$J$j0c$$$^$9!#e(B

|\> (1) producte$B$,%V%m%C%/$r\<h$k$h$&$K$9$k!#La$jCM$OG[Ns$N$^$^!#e(B

|e$B%V%m%C%/$,M?$($i$l$?;~$KLa$jCM$,e(B self e$B$de(B nil e$B$K$J$k$N$G$"$l$P!"e(B  
|e$B$=$l$G$b9=$o$J$$$H;W$$$^$9!#e(B

|\> (3) LazyArraye$B$N$h$&$J$b$N$r:n$C$F!“e(Bproduct(e$B$He(Bcombinatione$B$He(B  
|\> permutation)e$B$,%V%m%C%/$,M?$($i$l$J$$;~$K$O!”$=$l$rJV$9$he(B  
|\> e$B$&$K$9$k!#e(B  
|\>  
|\> e$B$H$$$&$N$b9M$($i$l$^$9$,!"$h$j$_$_$2$5$G$9$M!#e(B  
|  
|Enumerator e$B$O\>-Mhe(B LazyArray e$B$KJQ$o$C$F$$$/$H;W$C$F$$$k$N$G!"e(B  
|e$BBg$2$5$H$O46$8$^$;$s$G$7$?!#$9$0$K$O\<BAu$G$-$J$$$H;W$$$^$9$,!#e(B

e$B$=$l$Oe(BLazyArraye$B$,$G$-$k$^$Ge(Bproducte$B$NJQ99$OBT$F$k$H$$$&0UL#$Ge(B  
e$B$9$+!#e(B

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [March 31, 2010, 12:09am UTC](https://www.ruby-forum.com/t/why-doesnt-array-product-return-enumerator/175209/8 "2010-03-31T00:09:58Z")

</div>

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:40860] Re: Why doesn’t Array#product return  
Enumerator?”  
on Wed, 31 Mar 2010 01:43:26 +0900, Yusuke ENDOH [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
writes:

|LazyArray e$B$OF3F~$N8+9~$_$,Gv$/$J$C$?$HJ9$$$?$N$G!"$=$l$J$ie(B (1) e$B$,e(B  
|e$B$$$$$+$J$H;W$$$^$9!#e(B  
|  
|e$B@dL/$J%?%$%_%s%0$Ge(B Feature #3021 [ruby-core:29045] e$B$Ge(B (1) e$B$HF1$8e(B  
|e$BDs0F$,$J$5$l$F$$$ke(B (e$B$H$$$&$+$=$l$r8+$F$3$N%a!\<%k$r;W$$=P$7$?e(B) e$B$N$Ge(B  
|e$B\>5G’$rD:$1$k$H4r$7$$$G$9!#e(B1.9.2 e$B$KF~$k$?$a$K$O:#F|Cf$G$9$,!D!D!#e(B

e$B;d$O;?@.$7$^$9!#e(B
