# Minor improvements and doc fix for Enumerable

**URL:** <https://www.ruby-forum.com/t/minor-improvements-and-doc-fix-for-enumerable/104504>\
**Category:** Development\
**Created:** [May 18, 2007, 7:17pm UTC](https://www.ruby-forum.com/t/minor-improvements-and-doc-fix-for-enumerable/104504 "2007-05-18T19:17:54Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [May 18, 2007, 7:17pm UTC](https://www.ruby-forum.com/t/minor-improvements-and-doc-fix-for-enumerable/104504/1 "2007-05-18T19:17:54Z")

</div>

e$B$J$+$@$G$9!#e(B

injecte$B$O!"e(BNODEe$B$r;H$&$h$j$b%m!\<%+%kJQ?t$rD\>@;H$&$[$&$,$A$g$C$He(B  
e$BB.$$$h$&$J5$$,$7$^$9!#e(B

onee$B$O!“0lEYe(Bfalsee$B$K$J$C$F$7$^$($P$=$l0J\>eB39T$9$kI,MW$O$J$$$s$8$ce(B  
e$B$J$$$G$7$g$&$+!#%I%-%e%a%s%H$NNc$O!”$=$NA0$N5-=R$H$b\<B:]$NF0:n$He(B  
e$B$b$"$C$F$$$J$$$b$N$,$"$j$^$9!#e(B

# Index: enum.c

— enum.c (revision 12297)  
+++ enum.c (working copy)  
@@ -336,12 +336,12 @@ enum\_to\_a(VALUE obj)

static VALUE  
-inject\_i(VALUE i, VALUE memo)  
+inject\_i(VALUE i, VALUE p)  
{

- if (RARRAY\_PTR(memo)[0] == Qundef) {
- 

```
   RARRAY_PTR(memo)[0] = i;

```

- VALUE \*memo = (VALUE \*)p;
- if (memo[0] == Qundef) {
- memo[0] = i;  
}  
else {

- RARRAY\_PTR(memo)[1] = i;
- 

```
   RARRAY_PTR(memo)[0] = rb_yield(memo);

```

- memo[0] = rb\_yield\_values(2, memo[0], i);  
}  
return Qnil;  
@@ -349,15 +349,13 @@ inject\_i(VALUE i, VALUE memo)

static VALUE  
-inject\_op\_i(VALUE i, NODE \*node)  
+inject\_op\_i(VALUE i, VALUE p)  
{

- VALUE memo = node-\>nd\_rval;

- VALUE \*memo = (VALUE \*)p;

- if (RARRAY\_PTR(memo)[0] == Qundef) {
- 

```
   RARRAY_PTR(memo)[0] = i;

```

- if (memo[0] == Qundef) {
- memo[0] = i;  
}  
else {

- VALUE v = RARRAY\_PTR(memo)[0];
- RARRAY\_PTR(memo)[1] = i;
- 

```
   RARRAY_PTR(memo)[0] = rb_funcall(v, node->nd_vid, 1, i);

```

- memo[0] = rb\_funcall(memo[0], (ID)memo[1], 1, i);  
}  
return Qnil;  
@@ -429,22 +427,18 @@ static VALUE  
enum\_inject(int argc, VALUE \*argv, VALUE obj)  
{

- VALUE memo, a1, a2, tmp;
- NODE \*node = 0;

- VALUE memo[2];
- VALUE (\*iter)(VALUE, VALUE) = inject\_i;

- switch (rb\_scan\_args(argc, argv, “02”, &a1, &a2)) {

- switch (rb\_scan\_args(argc, argv, “02”, &memo[0], &memo[1])) {  
case 0:

- memo = rb\_ary\_new3(2, Qundef, Qnil);
- rb\_block\_call(obj, id\_each, 0, 0, inject\_i, memo);

- memo[0] = Qundef;  
break;  
case 1:  
if (rb\_block\_given\_p()) {

- 

```
 memo = rb_ary_new3(2, a1, Qnil);

```

- 

```
 rb_block_call(obj, id_each, 0, 0, inject_i, memo);

```

- }
- else {
- 

```
 memo = rb_ary_new3(2, Qundef, Qnil);

```

- 

```
 node = rb_node_newnode(NODE_MEMO, rb_to_id(a1), memo, 0);

```

- 

```
 rb_block_call(obj, id_each, 0, 0, inject_op_i, (VALUE)node);

```

- 

```
 break;

```

}
- memo[1] = (VALUE)rb\_to\_id(memo[0]);
- memo[0] = Qundef;
- iter = inject\_op\_i;  
break;  
case 2:  
@@ -452,12 +446,11 @@ enum\_inject(int argc, VALUE \*argv, VALUE  
rb\_warning(“given block not used”);  
}

- memo = rb\_ary\_new3(2, a2, Qnil);
- node = rb\_node\_newnode(NODE\_MEMO, rb\_to\_id(a1), memo, 0);
- rb\_block\_call(obj, id\_each, 0, 0, inject\_op\_i, (VALUE)node);

- memo[1] = (VALUE)rb\_to\_id(memo[1]);
- iter = inject\_op\_i;  
break;  
}

- tmp = RARRAY\_PTR(memo)[0];
- if (tmp == Qundef) return Qnil;
- return tmp;

- rb\_block\_call(obj, id\_each, 0, 0, iter, (VALUE)memo);
- if (memo[0] == Qundef) return Qnil;
- return memo[0];  
}

@@ -831,7 +824,7 @@ enum\_any(VALUE obj)

static VALUE  
-one\_iter\_i(VALUE i, VALUE \*memo)  
+one\_i(VALUE i, VALUE \*memo)  
{

- if (RTEST(rb\_yield(i))) {

- if (RTEST(i)) {  
if (\*memo == Qundef) {  
\*memo = Qtrue;  
@@ -839,4 +832,5 @@ one\_iter\_i(VALUE i, VALUE \*memo)  
else if (\*memo == Qtrue) {  
\*memo = Qfalse;
- 

```
 rb_iter_break();

```

}  
}  
@@ -845,15 +839,7 @@ one\_iter\_i(VALUE i, VALUE \*memo)

static VALUE  
-one\_i(VALUE i, VALUE \*memo)  
+one\_iter\_i(VALUE i, VALUE \*memo)  
{

- if (RTEST(i)) {
- if (\*memo == Qundef) {
- 

```
 *memo = Qtrue;

```

- }
- else if (\*memo == Qtrue) {
- 

```
 *memo = Qfalse;

```

- }
- }
- return Qnil;

- return one\_i(rb\_yield(i), memo);  
}

@@ -870,5 +856,6 @@ one\_i(VALUE i, VALUE \*memo)

- 

```
%w{ant bear cat}.one? {|word| word.length == 4} #=> true

```

- 

```
%w{ant bear cat}.one? {|word| word.length >= 4} #=> false

```

- 
  - 

```
[nil, true, 99].one? #=> true

```

- 
  - 

```
[nil, true, 99].one? #=> false

```

- 
  - 

```
[nil, true, false].one? #=> true

```

  - 

\*/  
@@ -885,7 +872,7 @@ enum\_one(VALUE obj)

static VALUE  
-none\_iter\_i(VALUE i, VALUE \*memo)  
+none\_i(VALUE i, VALUE \*memo)  
{

- if (RTEST(rb\_yield(i))) {

- if (RTEST(i)) {  
\*memo = Qfalse;  
rb\_iter\_break();  
@@ -895,11 +882,7 @@ none\_iter\_i(VALUE i, VALUE \*memo)

static VALUE  
-none\_i(VALUE i, VALUE \*memo)  
+none\_iter\_i(VALUE i, VALUE \*memo)  
{

- if (RTEST(i)) {
- \*memo = Qfalse;
- rb\_iter\_break();
- }
- return Qnil;

- return none\_i(rb\_yield(i), memo);  
}

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [May 18, 2007, 7:26pm UTC](https://www.ruby-forum.com/t/minor-improvements-and-doc-fix-for-enumerable/104504/2 "2007-05-18T19:26:56Z")

</div>

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

In message “Re: [ruby-dev:30792] minor improvements and doc fix for  
Enumerable”  
on Sat, 19 May 2007 02:17:14 +0900, Nobuyoshi N.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

|injecte$B$O!"e(BNODEe$B$r;H$&$h$j$b%m!\<%+%kJQ?t$rD\>@;H$&$[$&$,$A$g$C$He(B  
|e$BB.$$$h$&$J5$$,$7$^$9!#e(B

e$B5$$K$J$k$[$I0c$&$+$I$&$+$O$o$+$j$^$;$s$,!"$;$C$+$/$N%Q%C%A$Je(B  
e$B$N$G%3%\_%C%H$7$F$/$@$5$$!#e(B

|onee$B$O!“0lEYe(Bfalsee$B$K$J$C$F$7$^$($P$=$l0J\>eB39T$9$kI,MW$O$J$$$s$8$ce(B  
|e$B$J$$$G$7$g$&$+!#%I%-%e%a%s%H$NNc$O!”$=$NA0$N5-=R$H$b\<B:]$NF0:n$He(B  
|e$B$b$“$C$F$$$J$$$b$N$,$”$j$^$9!#e(B

e$B$3$A$i$b!#e(B
