[prev in list] [next in list] [prev in thread] [next in thread] 

List:       ruby-talk
Subject:    (repost) Support for arbitrary iterators in Enumerable?
From:       Emmanuel Touzery <emmanuel.touzery () wanadoo ! fr>
Date:       2003-11-20 14:26:56
[Download RAW message or body]

Hello,

it's a bit of an old mail from somebody else i'm sending again (2 oct 
2003).. i probably missed something, since nobody answered to it, but it 
seems interesting to me. is speed the issue maybe?
why is it not the way he suggests?

emmanuel

Pierre-Charles David wrote:

>Hello,
>
>I really like the way Ruby handles iteration (each/yield), and
>combined with all the standard methods in Enumerable, it makes it easy
>powerful algorithms in a very concise way. However, and unless I'm
>missing something, Enumerable is hard-coded to only use the standard
>#each iterator.
>
>Sometimes it's convenient for a class to provide several iterators.
>For example, String has #each_line and #each_byte, and we could
>imagine #each_word, #each_paragraph, etc. With the current setup, only
>one of these can be aliased to #each and conveniently use
>Enumerable#collect and friends.
>
>I would really like to be able to pass the name of an iterator method
>to Enumerable methods. If the parameter value defaults to :each, it
>would not break any existing code.
>
>Here's an example of what I'm thinking of, for Enumerable#collect:
>
>module Enumerable
>  def collect(iterator = :each)
>    raise "Invalid iterator" if not self.respond_to?(iterator)
>    result = Array.new
>    self.send(iterator) do |val|
>      result << yield(val)
>    end
>    return result
>  end
>end
>
>Is this kind of thing already possible (maybe in 1.8.0) ? If not, do
>you think it would be a valuable addition ?
>
>  
>




[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic