On May 21, 11:55 am, Robert Klemme <shortcut... / googlemail.com> wrote:
> On 21.05.2007 17:51, Trans wrote:
>
>
>
> > On May 21, 10:35 am, Robert Klemme <shortcut... / googlemail.com> wrote:
>
> >>> An alternative is to use a functor (a function delegator) for your
> >>> parameters, eg.
> >>>   f = Foo.new
> >>>   f.range(1,5).each{|x| p x}
> >> ... which is basically the same as using to_enum - only less portable;
> >> to_enum works with *all* methods. :-)
>
> > That true. But at least it reads much better.
>
> Even that is subjective: I personally prefer to read f.to_enum(:range,
> 1, 5) because then I know this is going to be capable of all the
> Enumerable methods.  YMMD though.  :-)

Not sure I understand what you mean by "because then I know this is
going to be capable of all the Enumerable methods", b/c what #range
returns can be too. In fact I think it can be defined like this:

  def range(x,y)
    Functor.new(self) do |op, obj|
      obj.to_enum(op,x,y)
    end
  end

(don't quote me on that though, I haven't tested it.)

So I take it you actually mean that using to_enum is better in that
you don't need to know anything about #range to understand the code? I
can understand, but I think its preferable to break things down into
smaller, more readable, sub-functions.

T.