>>>>> "M" == Mark Slagell <ms / iastate.edu> writes:

M> Lovely stuff!  Thanks.  The block_given? line gives me a "stack level too deep"
M> error (wassat mean?) but the rest fits the bill nicely.
 
 This is because you use 1.4.6 and Dave Thomas use 1.6.0

 To work with 1.4.6, you need 2 modifications

>> class Class
>> def method_missing(meth, *params)
>> if block_given?
 
   if iterator?

>> self.new(*params).send(meth) { |*p| yield *p }

   self.new(*params).send(meth) { |p| yield p }

>> else
>> self.new(*params).send(meth)
>> end
>> end
>> end

 1.4.6 interpret 'yield *p' as 'yield() * p'
 1.6.0 interpret 'yield *p' as 'yield(*p)' and give a warning with -w


Guy Decoux