On 21.05.2007 19:52, Trans wrote: > > 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. Yes, it *can* - that's not the point. But if I see foo.to_enum(:bar, 24, 5) in code I know already that the return value of #to_enum includes Enumerable while in the case of #range I have to look into documentation. > 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? Exactly. > I can understand, but I think its preferable to break things down into > smaller, more readable, sub-functions. Um, I am not sure I understand what you mean by this in the current context. Can you please elaborate? Kind regards robert