Does Object#to_enum exist?

Hi, all.

I saw someone post a snippet of code that turned an object (with some sort of "each" method) into an enumerable. It looked really neat, until I tried:

>> "abcdef".to_enum(:each_byte)
NoMethodError: undefined method `to_enum' for "abcdef":String
         from (irb):1
>>

I looked it up and ri seems to think I have Object#to_enum. The underlying code is c, so frankly, I don't understand it. Even running the examples from the documentation or looking at Object.new.methods, I see nothing about this elusive method. Does anybody have any insight? (I'm using ruby 1.8.6.)

Thanks,
Dan

Hi,

···

In message "Re: does Object#to_enum exist?" on Thu, 26 Apr 2007 16:45:36 +0900, Dan Zwell <dzwell@gmail.com> writes:

I saw someone post a snippet of code that turned an object (with some
sort of "each" method) into an enumerable. It looked really neat, until
I tried:

>> "abcdef".to_enum(:each_byte)
NoMethodError: undefined method `to_enum' for "abcdef":String
        from (irb):1
>>

I looked it up and ri seems to think I have Object#to_enum.

It's available only for 1.9. You can use it with Enumerator
additional library installed.

              matz.

Alle giovedì 26 aprile 2007, Dan Zwell ha scritto:

Hi, all.

I saw someone post a snippet of code that turned an object (with some
sort of "each" method) into an enumerable. It looked really neat, until

I tried:
>> "abcdef".to_enum(:each_byte)

NoMethodError: undefined method `to_enum' for "abcdef":String
         from (irb):1

I looked it up and ri seems to think I have Object#to_enum. The
underlying code is c, so frankly, I don't understand it. Even running
the examples from the documentation or looking at Object.new.methods, I
see nothing about this elusive method. Does anybody have any insight?
(I'm using ruby 1.8.6.)

Thanks,
Dan

You need to require 'enumerator'. Doing this will result in the to_enum method
to be added to the Kernel module and to class Object, which mixes Kernel in.
For example

require 'enumerator'

"abcdef".to_enum(:each_byte).each{|b| puts b.chr}
a
b
c
d
e
f

I hope this helps

Stefano

Thank you. I feel silly for making such a newbie-ish mistake, but then again, I'm a newbie.

Dan

Yukihiro Matsumoto wrote:

···

Hi,

In message "Re: does Object#to_enum exist?" > on Thu, 26 Apr 2007 16:45:36 +0900, Dan Zwell <dzwell@gmail.com> writes:

>I saw someone post a snippet of code that turned an object (with some >sort of "each" method) into an enumerable. It looked really neat, until >I tried:
>
> >> "abcdef".to_enum(:each_byte)
>NoMethodError: undefined method `to_enum' for "abcdef":String
> from (irb):1
> >>
>
>I looked it up and ri seems to think I have Object#to_enum.

It's available only for 1.9. You can use it with Enumerator
additional library installed.

              matz.

It is from our mistakes that we learn, I was about to check for
#to_enum very recently but was too lazy and/or proud to ask, so I
learned too :slight_smile:

Cheers
Robert

···

On 4/26/07, Dan Zwell <dzwell@gmail.com> wrote:

Thank you. I feel silly for making such a newbie-ish mistake, but then
again, I'm a newbie.

--
You see things; and you say Why?
But I dream things that never were; and I say Why not?
-- George Bernard Shaw