On Wed, Nov 12, 2008 at 06:01:40PM +0900, Brian Candler wrote:
> However I'm not sure what should happen for methods defined from blocks,
> e.g. define_method(:foo) { |a,(b,c)| ... }

Hmm.

  class Foo
    define_method(:foo) { |a,(b,c)| p a,b,c }
  end

  Foo.new.foo(1,[2,3])
  puts "Arity: #{Foo.new.method(:foo).arity}"

So foo has an arity of 2. But if you pass anything other than a two-element
array for the second argument, you get an ArgumentError: wrong number of
arguments.

This suggests to me that the arguments structure needs to be nestable; the
second argument is itself an argument list.