On 21.05.2007 12:41, Erwin Abbott wrote: > I've written a number of classes which would benefit from the > Enumerable mixin, but my #each method requires arguments. These are > usually to specify the range of values, like Fibonacci#each(first, > last) or whatever. Since Enumerable's #map, #collect, etc don't take > arguments, how should I proceed? I would be okay with wrapping the > Enumerable methods I need, but that doesn't seem possible. Do I just > have to implement my own #map, #to_a, etc? Just use Enumerator: 12:54:27 [client_1]: irb -r enumerator irb(main):001:0> class Foo irb(main):002:1> include Enumerable irb(main):003:1> def each(a,b,&bl) (a..b).each(&bl); self end irb(main):004:1> end => nil irb(main):005:0> Foo.new.each(1,5) {|x| p x} 1 2 3 4 5 => #<Foo:0x7ef7e9b8> irb(main):006:0> Foo.new.to_enum(:each,1,5).map {|x| x+x} => [2, 4, 6, 8, 10] Btw, is your Foibonacci#each really an instance method or rather a class method? If it is an instance method you might as well store arguments in the instance, so you do Fibonacci.new(1,10).each {|fib| puts fib} Kind regards robert