$ ruby19 -v -e "p proc{}.arity"
ruby 1.9.0 (2007-02-07 patchlevel 0) [i686-linux]
0
$ ./ruby19 -v -e "p proc{}.arity"
ruby 1.9.0 (2007-04-26 patchlevel 0) [i686-linux]
-1

However, the RDoc documentation attached to proc_arity still says that it
should return 0, so there's a bug, either in the code (wrong iseq->argc ?) or
in the docs (if the latter, the patch below should do).

See also 
 [ruby-core:2829]
 [ruby-core:11026]
 [ruby-talk:249148]


--- proc.c.orig 2007-04-26 11:48:35.000000000 +0200 +++ proc.c 2007-04-26 11:49:34.000000000 +0200 @@ -410,15 +410,14 @@ * call-seq: * prc.arity -> fixnum * - * Returns the number of arguments that would not be ignored. If the block - * is declared to take no arguments, returns 0. If the block is known - * to take exactly n arguments, returns n. If the block has optional - * arguments, return -n-1, where n is the number of mandatory - * arguments. A <code>proc</code> with no argument declarations - * is the same a block declaring <code>||</code> as its arguments. + * If the block is declared to take no arguments, returns -1. If the block is + * known to take exactly n arguments, returns n. If the block has optional + * arguments, return -n-1, where n is the number of mandatory arguments. A + * <code>proc</code> with no argument declarations is the same a block + * declaring <code>||</code> as its arguments. * - * Proc.new {}.arity #=> 0 - * Proc.new {||}.arity #=> 0 + * Proc.new {}.arity #=> -1 + * Proc.new {||}.arity #=> -1 * Proc.new {|a|}.arity #=> 1 * Proc.new {|a,b|}.arity #=> 2 * Proc.new {|a,b,c|}.arity #=> 3
-- Mauricio Fernandez - http://eigenclass.org - singular Ruby ** Latest postings ** On GC and finalizers in Ruby, corrected weak hash table implementations http://eigenclass.org/hiki/deferred-finalizers-in-Ruby simplefold: better vim folding (Ruby, Objective Caml, Perl, PHP, Java) http://eigenclass.org/hiki/simplefold