Enumerator of what?

Any way to ask an Enumerator what the underlying object it is
enumerating for is? Eg.

e = Enumerator.new([1,2,3], :each)
e.some_method #=> [1,2,3]

Not as far as I know,

but this patch could do it if you really need it

— enumerator.c 2009-04-19 15:33:31.000000000 +0200
+++ enumerator-with-obj-access.c 2009-07-18 18:02:33.000000000
+0200
@@ -537,6 +537,12 @@
return v;
}

+static VALUE
+enumerator_get_object( VALUE obj )
+{

  •   return enumerator_ptr( obj )->obj;
    

+}
+
/*

  • call-seq:
  • e.rewind => e
    @@ -788,6 +794,7 @@
    rb_define_method(rb_cEnumerator, “initialize”,
    enumerator_initialize, -1);
    rb_define_method(rb_cEnumerator, “initialize_copy”,
    enumerator_init_copy, 1);
    rb_define_method(rb_cEnumerator, “each”, enumerator_each, 0);
  • rb_define_method(rb_cEnumerator, “get_object”,
    enumerator_get_object, 0);
    rb_define_method(rb_cEnumerator, “each_with_index”,
    enumerator_with_index, 0);
    rb_define_method(rb_cEnumerator, “each_with_object”,
    enumerator_with_object, 1);
    rb_define_method(rb_cEnumerator, “with_index”,
    enumerator_with_index, 0);

please note that
2.times.get_object will give you 2 and not [0, 1] which 2.times.to_a
would give you.

Cheers
Robert

On 7/18/09, Intransition [email protected] wrote:

Any way to ask an Enumerator what the underlying object it is
enumerating for is? Eg.

e = Enumerator.new([1,2,3], :each)
e.some_method #=> [1,2,3]

–
Toutes les grandes personnes ont d’abord été des enfants, mais peu
d’entre elles s’en souviennent.

All adults have been children first, but not many remember.

[Antoine de Saint-Exupéry]

but this patch could do it if you really need it

Is this functionality…useful enough to merit being submitted to core?

On 7/18/09, Roger P. [email protected] wrote:

but this patch could do it if you really need it

Is this functionality…useful enough to merit being submitted to core?
I do not think so, I was in a strange mood and as there is no other
way…
I suspect that enumerator hides its obj by designed.

But of course this patch is in the public domain now.

Cheers
Robert

–
Toutes les grandes personnes ont d’abord été des enfants, mais peu
d’entre elles s’en souviennent.

All adults have been children first, but not many remember.

[Antoine de Saint-Exupéry]