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.