From: matz@... (Yukihiro Matsumoto) Date: 2003-05-13T17:15:19+09:00 Subject: Re: [RCR?] Enumerable#each with arguments Hi, In message "Re: [RCR?] Enumerable#each with arguments" on 03/05/13, Sam Roberts writes: |Quoteing matz@ruby-lang.org, on Mon, May 12, 2003 at 12:14:46PM +0900: |> Hmm, but some of enumerable methods take its own argument, for example |> "grep". In addition, class dependent additional argument breaks |> polymorphism. There must be better idea (e.g. external iterator object). | |Yes, but we *like* using each() rather than an external iterator! Yes, but it is easy like this: # Enumerable extension. module Enumerable class Enumerator include Enumerable def initialize(obj, *args) @obj = obj @args = args end def each(&block) @obj.each(*@args, &block) end end def each_with(*args) Enumerator.new(self, *args) end end # sample class class Foo include Enumerable def each(n=100) for i in 0..n yield i end end end f = Foo.new f.each(5){|i| p i} f.each_with(5).collect{|i| i*3} matz.