# Enumerator with single array and multiple arguments

**URL:** <https://www.ruby-forum.com/t/enumerator-with-single-array-and-multiple-arguments/120947>\
**Category:** Development\
**Created:** [November 22, 2007, 2:32am UTC](https://www.ruby-forum.com/t/enumerator-with-single-array-and-multiple-arguments/120947 "2007-11-22T02:32:00Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [November 22, 2007, 2:32am UTC](https://www.ruby-forum.com/t/enumerator-with-single-array-and-multiple-arguments/120947/1 "2007-11-22T02:32:00Z")

</div>

enumerator e$B$rDL$9$H$R$H$D$NG[Ns$HJ#?t$N0z?t$,6hJL$G$-$^$;$s!#e(B

% ./ruby -ve ’  
class C  
def each  
yield [1,2]  
yield 1,2  
end  
end  
vs1 = []  
C.new.each {|\*v| vs1 \<\< v }  
p vs1

e = C.new.to\_enum  
vs2 = []  
e.each {|\*v| vs2 \<\< v }  
p vs2  
’  
ruby 1.9.0 (2007-11-21 patchlevel 0) [i686-linux]  
[[[1, 2]], [1, 2]]  
[[[1, 2]], [[1, 2]]]

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [November 28, 2007, 6:55am UTC](https://www.ruby-forum.com/t/enumerator-with-single-array-and-multiple-arguments/120947/2 "2007-11-28T06:55:38Z")

</div>

e$B!!$5$5$@$G$9!%e(B

Tanaka A. wrote:

> enumerator e$B$rDL$9$H$R$H$D$NG[Ns$HJ#?t$N0z?t$,6hJL$G$-$^$;$s!#e(B

e$B!!$3$s$J46$8$G$I$&$G$7$g$&$+!%e(Brb\_iterate e$B$G@Q$`e(B C  
e$B$G=q$$$?%V%m%C%/8Fe(B  
e$B$S=P$74X?t$G!$e(B1.8 e$B$@$He(B self  
e$B$rEO$7$F$$$?$H$3$m$r!$0z?t$N?t$rEO$9$h$&e(B  
e$B$K$7$F$\_$^$7$?!%C/$be(B self e$B;H$C$F$J$$$+$i$$$$$+$J$!!$$H!%e(B

# Index: include/ruby/ruby.h

# — include/ruby/ruby.h (e$B%j%S%8%g%se(B 14039) +++ include/ruby/ruby.h (e$B:n6H%3%T!\<e(B) @@ -772,6 +772,7 @@ VALUE rb\_each(VALUE); VALUE rb\_yield(VALUE); VALUE rb\_yield\_values(int n, …); +VALUE rb\_yield\_values2(int n, VALUE \*argv); VALUE rb\_yield\_splat(VALUE); int rb\_block\_given\_p(void); void rb\_need\_block(void); Index: enumerator.c

— enumerator.c (e$B%j%S%8%g%se(B 14039)  
+++ enumerator.c (e$B:n6H%3%T!\<e(B)  
@@ -225,6 +225,17 @@  
}

static VALUE  
+enumerator\_each\_i(VALUE v, VALUE enum\_obj, int argc)  
+{

- if (argc == 1) {
- return rb\_yield(v);
- }
- else {
- return rb\_yield\_values2(argc, RARRAY\_PTR(v));
- }  
+}
- 

+static VALUE  
enumerator\_init(VALUE enum\_obj, VALUE obj, VALUE meth, int argc,  
VALUE \*argv)  
{  
struct enumerator \*ptr = enumerator\_ptr(enum\_obj);  
@@ -235,7 +246,7 @@  
ptr-\>iter = enumerator\_iter\_i;  
}  
else {

- ptr-\>iter = (enum\_iter \*)rb\_yield;

- ptr-\>iter = (enum\_iter \*)enumerator\_each\_i;  
}  
if (argc) ptr-\>args = rb\_ary\_new4(argc, argv);  
ptr-\>fib = 0;  
Index: eval.c  
===================================================================  
— eval.c (e$B%j%S%8%g%se(B 14039)  
+++ eval.c (e$B:n6H%3%T!\<e(B)  
@@ -953,6 +953,12 @@  
}

VALUE  
+rb\_yield\_values2(int argc, VALUE \*argv)  
+{

- return rb\_yield\_0(argc, argv);  
+}
- 

# +VALUE rb\_yield\_splat(VALUE values) { VALUE tmp = rb\_check\_array\_type(values); Index: insnhelper.ci

— insnhelper.ci (e$B%j%S%8%g%se(B 14039)  
+++ insnhelper.ci (e$B:n6H%3%T!\<e(B)  
@@ -661,7 +661,7 @@  
self, (VALUE)block-\>dfp,  
0, th-\>cfp-\>sp, block-\>lfp, 1);

- val = (\*ifunc-\>nd\_cfnc) (arg, ifunc-\>nd\_tval, Qnil);

- val = (\*ifunc-\>nd\_cfnc) (arg, ifunc-\>nd\_tval, argc);

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [November 28, 2007, 7:57am UTC](https://www.ruby-forum.com/t/enumerator-with-single-array-and-multiple-arguments/120947/3 "2007-11-28T07:57:00Z")

</div>

In article [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid),  
SASADA Koichi [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> e$B!!$3$s$J46$8$G$I$&$G$7$g$&$+!%e(Brb\_iterate e$B$G@Q$`e(B C e$B$G=q$$$?%V%m%C%/8Fe(B  
> e$B$S=P$74X?t$G!$e(B1.8 e$B$@$He(B self e$B$rEO$7$F$$$?$H$3$m$r!$0z?t$N?t$rEO$9$h$&e(B  
> e$B$K$7$F$\_$^$7$?!%C/$be(B self e$B;H$C$F$J$$$+$i$$$$$+$J$!!$$H!%e(B

yield(\*[]) e$B$H$9$k$He(B to\_enum e$B$G\>pJs$,JQ2=$7$^$9!#e(B

% ./ruby -ve ’  
class C  
def each  
yield(\*[])  
end  
end  
vs1 = []  
C.new.each {|\*v| vs1 \<\< v }  
p vs1  
vs2 = []  
C.new.to\_enum.each {|\*v| vs2 \<\< v }  
p vs2  
’  
ruby 1.9.0 (2007-11-28 patchlevel 0) [i686-linux]  
[[]]  
[[[]]]

v e$B$He(B argc e$B$NAH9g$;$G\>pJs$rEA$($k$N$O4V0c$$$d$9$$$N$G!"\>o$KG[e(B  
e$BNs$G$o$?$9e(B API e$B$,$$$$$N$G$O$J$$$G$7$g$&$+!#e(B

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [November 28, 2007, 8:21am UTC](https://www.ruby-forum.com/t/enumerator-with-single-array-and-multiple-arguments/120947/4 "2007-11-28T08:21:33Z")

</div>

e$B!!$5$5$@$G$9!%e(B

Tanaka A. wrote:

> yield(\*[]) e$B$H$9$k$He(B to\_enum e$B$G\>pJs$,JQ2=$7$^$9!#e(B

e$B!!$9$\_$^$;$s!%$3$l$O$?$@$N%P%0$G$7$?!%B\>$K$bJQ$JNc$,$"$C$?$i65$($F$/e(B  
e$B$@$5$$!%e(B

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [November 29, 2007, 8:15am UTC](https://www.ruby-forum.com/t/enumerator-with-single-array-and-multiple-arguments/120947/5 "2007-11-29T08:15:03Z")

</div>

e$B!!$5$5$@$G$9!%e(B

Yukihiro M. wrote:

> e$B$1$C$3$&NI$$%"%$%G%#%"$G$O$J$$$+$H;W$$$^$7$?!#8D?ME\*$K$O4X?te(B  
> e$B$Ke(Bargc, argve$B$rEO$9e(Brb\_block\_call()e$BN`;w$N4X?t$r:n$k:n6HCf$G$7e(B  
> e$B$?$,!"$3$C$A$NJ}$,0\9T%3%9%H$,Dc$=$&!#e(B

e$B!!$=$l$rA@$$$^$7$?!%e(B

> e$B$3$l$HF1$8$3$H$r7k6I$"$A$3$A$G$7$J$1$l$P$J$i$J$$$N$G!"$3$l$Oe(B  
> rb\_yield\_values3()e$B$H$+$$$&L\>A0$Ge(Bpublice$B$K$7$F$O$I$&$G$7$g$&$+!#e(B  
> e$B$b$C$HNI$$L\>A0$,$"$k$+$b$7$l$^$;$s$,!#e(B

e$B!!$"$A$3$A$G$7$J$$$H%@%a$G$9$+!%D/$a$F$_$F!$\<B$O$"$s$^$j$J$$$+$J!$$He(B  
e$B;W$C$?$s$G$9$,!%$H$j$"$($:%3%_%C%H$7$F!$Bt;3;H$&$h$&$@$C$?$i4X?t2=$9e(B  
e$B$k$C$F$3$H$G$$$$$G$9$+$M!%e(B

e$B!!:#$^$G$Ne(B ifunc  
e$B0J\>e$K$3$NMQES$G;H$o$l$k$h$&$G$7$?$i!$$^$D$b$H$5$se(B  
e$B$b8@$C$F$$$k!V4X?t$Ke(Bargc,  
argve$B$rEO$9e(Brb\_block\_call()e$BN`;w$N4X?t!W$rMQe(B  
e$B0U$7$?$[$&$,NI$$$+$H;W$$$^$9!%e(B

> e$B$^$?!"\<B$Oe(Bargce$B$OI,MW$J$/$FC10l$NCM$+B?CMe(B(e$B$rG[Ns$K%Q%C%/$7$?e(B  
> e$B$b$N$+e(B)e$B6hJL$G$-$k%U%i%0$,$"$l$P$h$$$o$1$G$9$,!"$=$NJU$O$\*$^e(B  
> e$B$+$;$7$^$9!#e(B

e$B!!:G=i$Oe(B values e$BI|3h$+!$$H$+9M$($?$s$G$9$,!$$J$+$J$+!%e(B

---

<div class="post-metadata">

**Author:** ![Tanaka\_A](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/t/c67d28/32.png) [@Tanaka\_A](https://www.ruby-forum.com/u/Tanaka_A)\
**Post date:** [November 29, 2007, 7:50am UTC](https://www.ruby-forum.com/t/enumerator-with-single-array-and-multiple-arguments/120947/6 "2007-11-29T07:50:29Z")

</div>

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

In message “Re: [ruby-dev:32389] Re: enumerator with single array and  
multiple arguments.”  
on Wed, 28 Nov 2007 14:54:45 +0900, SASADA Koichi [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
writes:

|Tanaka A. wrote:  
|\> enumerator e$B$rDL$9$H$R$H$D$NG[Ns$HJ#?t$N0z?t$,6hJL$G$-$^$;$s!#e(B  
|  
|e$B!!$3$s$J46$8$G$I$&$G$7$g$&$+!%e(Brb\_iterate e$B$G@Q$`e(B C e$B$G=q$$$?%V%m%C%/8Fe(B  
|e$B$S=P$74X?t$G!$e(B1.8 e$B$@$He(B self e$B$rEO$7$F$$$?$H$3$m$r!$0z?t$N?t$rEO$9$h$&e(B  
|e$B$K$7$F$\_$^$7$?!%C/$be(B self e$B;H$C$F$J$$$+$i$$$$$+$J$!!$$H!%e(B

e$B$1$C$3$&NI$$%“%$%G%#%”$G$O$J$$$+$H;W$$$^$7$?!#8D?ME\*$K$O4X?te(B  
e$B$Ke(Bargc,  
argve$B$rEO$9e(Brb\_block\_call()e$BN`;w$N4X?t$r:n$k:n6HCf$G$7e(B  
e$B$?$,!"$3$C$A$NJ}$,0\9T%3%9%H$,Dc$=$&!#e(B

e$B$?$@!"e(B

| static VALUE  
|+enumerator\_each\_i(VALUE v, VALUE enum\_obj, int argc)  
|+{  
|+ if (argc == 1) {  
|+ return rb\_yield(v);  
|+ }  
|+ else {  
|+ return rb\_yield\_values2(argc, RARRAY\_PTR(v));  
|+ }  
|+}

e$B$3$l$HF1$8$3$H$r7k6I$“$A$3$A$G$7$J$1$l$P$J$i$J$$$N$G!”$3$l$Oe(B  
rb\_yield\_values3()e$B$H$+$$$&L\>A0$Ge(Bpublice$B$K$7$F$O$I$&$G$7$g$&$+!#e(B  
e$B$b$C$HNI$$L\>A0$,$"$k$+$b$7$l$^$;$s$,!#e(B

e$B$^$?!“\<B$Oe(Bargce$B$OI,MW$J$/$FC10l$NCM$+B?CMe(B(e$B$rG[Ns$K%Q%C%/$7$?e(B  
e$B$b$N$+e(B)e$B6hJL$G$-$k%U%i%0$,$”$l$P$h$$$o$1$G$9$,!"$=$NJU$O$\*$^e(B  
e$B$+$;$7$^$9!#e(B
