# \[Feature:trunk\] hide the internal of anonymous Enumerator

**URL:** <https://www.ruby-forum.com/t/feature-trunk-hide-the-internal-of-anonymous-enumerator/178860>\
**Category:** Development\
**Created:** [November 12, 2009, 12:54pm UTC](https://www.ruby-forum.com/t/feature-trunk-hide-the-internal-of-anonymous-enumerator/178860 "2009-11-12T12:54:40Z")\
**Posts on this page:** 3\
**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:** [November 12, 2009, 12:54pm UTC](https://www.ruby-forum.com/t/feature-trunk-hide-the-internal-of-anonymous-enumerator/178860/1 "2009-11-12T12:54:40Z")

</div>

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

[ruby-dev:39665] e$B$h$j0zMQ!#e(B

2009e$BG/e(B11e$B7ne(B12e$BF|e(B0:38 Akinori MUSHA [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> e$B!!e(BYielder/Generator e$B$H$$$&AH9g$;$K$h$k\<BAu$O\<B83E\*$J$b$N$G!“FC$Ke(B  
> e$B8e\<T$O30It$K8x3+$9$kI,MW$,$J$$$N$G4:$($FIz$;$F$$$^$7$?!#8x3+;EMM$Ke(B  
> e$B$9$k$H@)Ls$K$J$k$N$G!”\<{MW$,@8$8$k$^$G$OHs8x3+$NJ}$,$$$$$N$G$O$J$$e(B  
> e$B$G$7$g$&$+!#e(B

e$B$H$$$&$3$H$J$i!"$J$k$Y$/FbIt\<BAu$r%f!\<%6$+$i8+$($J$$$h$&$K$7$^$;$s$+!)e(B

- Enumerator::Generator e$B$rF?L\>%/%i%9$K$9$ke(B (ARGF e$B$N$h$&$Ke(B)
- Generator.new e$B$de(B Yielder.new e$B$r6X;\_$9$ke(B
- Enumerator#inspect e$B$Ge(B Generator e$B$NB8:\_$O1#$9e(B

e$B$H$9$k%Q%C%A$r=q$$$F$\_$^$7$?!#$I$&$G$7$g$&!#e(B

diff --git a/enumerator.c b/enumerator.c  
index 7c50f3d…88c37fd 100644  
— a/enumerator.c  
+++ b/enumerator.c  
@@ -886,29 +886,34 @@ inspect\_enumerator(VALUE obj, VALUE dummy, int  
recur)  
untrusted = OBJ\_UNTRUSTED(eobj);

```
 /* (1..100).each_cons(2) => "#<Enumerator: 1..100:each_cons(2)>" */

```

- str = rb\_sprintf("#\<%s: ", cname);
- rb\_str\_concat(str, rb\_inspect(eobj));
- rb\_str\_buf\_cat2(str, “:”);
- rb\_str\_buf\_cat2(str, rb\_id2name(e-\>meth));

- if (rb\_obj\_is\_kind\_of(eobj, rb\_cGenerator)) {
- str = rb\_sprintf(“#\<%s:%p\>”, cname, (void\*)eobj);
- }
- else {
- str = rb\_sprintf("#\<%s: ", cname);
- rb\_str\_concat(str, rb\_inspect(eobj));
- rb\_str\_buf\_cat2(str, “:”);
- rb\_str\_buf\_cat2(str, rb\_id2name(e-\>meth));

- if (e-\>args) {
- long argc = RARRAY\_LEN(e-\>args);
- VALUE \*argv = RARRAY\_PTR(e-\>args);

- 

```
   if (e->args) {

```

- 

```
 long argc = RARRAY_LEN(e->args);

```

- 

```
 VALUE *argv = RARRAY_PTR(e->args);

```

- rb\_str\_buf\_cat2(str, “(”);

- 

```
 rb_str_buf_cat2(str, "(");

```

- while (argc–) {
- 

```
 VALUE arg = *argv++;

```

- 

```
 while (argc--) {

```

- VALUE arg = \*argv++;

- 

```
 rb_str_concat(str, rb_inspect(arg));

```

- 

```
 rb_str_buf_cat2(str, argc > 0 ? ", " : ")");

```

- rb\_str\_concat(str, rb\_inspect(arg));
- rb\_str\_buf\_cat2(str, argc \> 0 ? ", " : “)”);

- 

```
 if (OBJ_TAINTED(arg)) tainted = TRUE;

```

- 

```
 if (OBJ_UNTRUSTED(arg)) untrusted = TRUE;

```

- }
- }

- if (OBJ\_TAINTED(arg)) tainted = TRUE;
- if (OBJ\_UNTRUSTED(arg)) untrusted = TRUE;
- 

```
 }

```

- 

```
   }

```

- rb\_str\_buf\_cat2(str, “\>”);

- rb\_str\_buf\_cat2(str, “\>”);

- }

- rb\_cGenerator = rb\_define\_class\_under(rb\_cEnumerator,  
“Generator”, rb\_cObject);

- rb\_cGenerator = rb\_class\_new(rb\_cObject);
- rb\_undef\_alloc\_func(rb\_cGenerator);
- rb\_set\_class\_path(rb\_cGenerator, rb\_cObject,  
“Enumerator::Generator”);  
rb\_include\_module(rb\_cGenerator, rb\_mEnumerable);

- rb\_define\_alloc\_func(rb\_cGenerator, generator\_allocate);
- rb\_define\_method(rb\_cGenerator, “initialize”, generator\_initialize,  
-1);
- rb\_define\_method(rb\_cGenerator, “initialize\_copy”,  
generator\_init\_copy, 1);  
rb\_define\_method(rb\_cGenerator, “each”, generator\_each, 0);

- rb\_obj\_freeze(rb\_cGenerator);

- rb\_gc\_register\_mark\_object(rb\_cGenerator);

- rb\_define\_alloc\_func(rb\_cYielder, yielder\_allocate);
- rb\_define\_method(rb\_cYielder, “initialize”, yielder\_initialize, 0);

- rb\_undef\_alloc\_func(rb\_cYielder);  
rb\_define\_method(rb\_cYielder, “yield”, yielder\_yield, -2);  
rb\_define\_method(rb\_cYielder, “\<\<”, yielder\_yield\_push, -2);

---

<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:** [November 12, 2009, 1:23pm UTC](https://www.ruby-forum.com/t/feature-trunk-hide-the-internal-of-anonymous-enumerator/178860/2 "2009-11-12T13:23:21Z")

</div>

At Thu, 12 Nov 2009 20:53:54 +0900,  
Yusuke ENDOH wrote:

> - Enumerator::Generator ã‚’åŒ¿åã‚¯ãƒ©ã‚¹ã«ã™ã‚‹ (ARGF ã®ã‚ˆã†ã«)
> - Generator.new ã‚„ Yielder.new ã‚’ç¦æ­¢ã™ã‚‹
> - Enumerator#inspect ã§ Generator ã®å­˜åœ¨ã¯éš ã™
> 
> ã¨ã™ã‚‹ãƒ‘ãƒƒãƒã‚’æ›¸ã„ã¦ã¿ã¾ã—ãŸã€‚ã©ã†ã§ã—ã‚‡ã†ã€‚

ã€€ãã“ã¾ã§ã™ã‚‹å¿…è¦ã¯ãªã„ã‹ã¨æ€ã£ã¦ã„ãŸã‚“ã§ã™ãŒã€ã©ã†ã§ã—ã‚‡ã†ã­ã€‚  
ã„ã˜ã‚‰ã‚Œã¦SEGVã™ã‚‹ã‚ˆã†ãªã‚‚ã®ã§ãªã‘ã‚Œã°ã€ãƒ‡ãƒãƒƒã‚°ã®ãŸã‚ã«ã¯éš ã—  
ã™ãŽãªã„æ–¹ãŒã„ã„ã‚“ã˜ã‚ƒãªã„ã‹ã¨ã‹ã€äº’æ›æ€§ã¯ä¿è¨¼ã—ãªã„ã‘ã©ãã‚Œã‚’  
æ•¢ãˆã¦ä½¿ã£ã¦å®Ÿé¨“çš„ãªãƒ©ã‚¤ãƒ–ãƒ©ãƒªã‚’æ›¸ãè‡ªç”±ã¾ã§ã¯å¥ªã„ãŸããªã„ã¨ã‹ã€  
ãã†ã„ã†è€ƒãˆã‚‚ã‚ã‚‹ã‚“ã§ã™ã‚ˆã­ã€‚ã¾ã‚ã€ä¸€è¨€ã§è¨€ã†ã¨ç§ã®éƒ½åˆã§ã™ãŒã€‚

ã€€ã¨ã¯ã„ãˆã€undocumentedã§ã‚ã£ã¦ã‚‚è¦‹ãˆã‚‹ã¨ä¸€èˆ¬åˆ©ç”¨ã•ã‚Œã¦ã€ãã‚ŒãŒ  
ãƒ¡ã‚¸ãƒ£ãƒ¼ã«ãªã‚‹ã¨ã€äº’æ›æ€§ã‚’å´©ã™ã¨rubyå´ã«æ–‡å¥ãŒæ¥ãŸã‚Šã™ã‚‹ã‹ãªã‚ã€‚  
é›£ã—ã„ã§ã™ã­â€¦ã€‚

---

<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 18, 2010, 3:45pm UTC](https://www.ruby-forum.com/t/feature-trunk-hide-the-internal-of-anonymous-enumerator/178860/3 "2010-03-18T15:45:43Z")

</div>

e$B%A%1%C%He(B #2360 e$B$,99?7$5$l$^$7$?!#e(B (by Yusuke E.)

e$B%9%F!\<%?%9e(B Assignede$B$+$ie(BRejectede$B$KJQ99e(B

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

> - Enumerator::Generator e$B$rF?L\>%/%i%9$K$9$ke(B (ARGF e$B$N$h$&$Ke(B)
> - Generator.new e$B$de(B Yielder.new e$B$r6X;\_$9$ke(B
> - Enumerator#inspect e$B$Ge(B Generator e$B$NB8:\_$O1#$9e(B
> 
> e$B$H$9$k%Q%C%A$r=q$$$F$\_$^$7$?!#$I$&$G$7$g$&!#e(B

[ruby-dev:39685] e$B$GDs0F$7$F$$$ke(B private constant  
e$B$G2r7h$9$kJ}$,e(B  
e$B$$$$$H;W$&$N$G!"$3$N%A%1%C%H$O\<+J,$Ge(B reject e$B$7$^$9!#e(B

e$B$A$J$\_$Ke(B private constant e$B$NDs0F$O!"e(B1.9.2  
e$B%j%j!\<%9$NAK32MW0x$Ke(B  
e$B$J$C$?$i7y$J$N$G!"e(B1.9.3 e$B$G$NF3F~$rL;X$9$3$H$K$7$^$7$?!#e(B

## – Yusuke E. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

[http://redmine.ruby-lang.org/issues/show/2360](http://redmine.ruby-lang.org/issues/show/2360)
