From: Trans Date: 2007-05-22T02:52:19+09:00 Subject: Re: using Enumerable when each has arguments? On May 21, 11:55 am, Robert Klemme wrote: > On 21.05.2007 17:51, Trans wrote: > > > > > On May 21, 10:35 am, Robert Klemme 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.