Why do you need to check the arity at all? If your method behaves differently depending on the number of block arguments, it's a clear sign you need two different methods. 2011/11/23, Bug Free <amberarrow / yahoo.com>: > Hi, > > I have a class with a custom iterator (each) that uses block.arity to > determine how many arguments to use on the yield. It works well but > when the caller invokes the iterator via each_with_index, the value > of block.arity is -1 which wreaks havoc. Does anyone know how to get the > correct value of block.arity in this situation?\ > > ruby -v > ruby 1.9.3p0 (2011-10-30) [x86_64-linux] > > Here is the sample code: > ------------------------------------------- > > #!/usr/bin/ruby -w > > # test block.arity value with each_with_index > > class A > include Enumerable > > def each( p, &b ) > puts "arity = #{b.arity}" > yield 'hello', 'world' > end > end > > a = A.new > a.each( 0 ) { |x, y| puts "x = #{x}, y = #{y}" } > a.each_with_index( 0 ) { |(x, y), i| puts "x = #{x}, y = #{y}" } > ---------------------------------------------------------------- > > Here is the output: > > arity = 2 > x = hello, y = world > arity = -1 > x = hello, y = world > > -- > Posted via http://www.ruby-forum.com/. > > -- Wysane z mojego urzdzenia przenonego -- Matma Rex