Arity?

J

Jon A. Lambert

From the Programming Ruby - The Pragmatic Programmer's Guide:

--class Proc ---
arity prc.arity -> anInteger

Returns the number of arguments required by the block. If the block
takes no arguments, returns -1. If it takes one argument, returns -2.
Otherwise, returns a positive argument count unless the last argument
is prefixed with *, in which case the argument count is negated. The
number of required arguments is anInteger for positive values, and
( anInteger +1).abs otherwise.

Proc.new {||}.arity » 0
Proc.new {|a|}.arity » -1
Proc.new {|a,b|}.arity » 2
Proc.new {|a,b,c|}.arity » 3
Proc.new {|*a|}.arity » -1
Proc.new {|a,*b|}.arity » -2

--class Method --

arity meth.arity -> aFixnum

Returns an indication of the number of arguments accepted by a method.
Returns a nonnegative integer for methods that take a fixed number of
arguments. For Ruby methods that take a variable number of arguments,
returns -n-1, where n is the number of required arguments. For methods
written in C, returns -1 if the call takes a variable number of arguments.
 
G

gabriele renzi

il Mon, 15 Dec 2003 09:52:50 +0900, "Jon A. Lambert"
From the Programming Ruby - The Pragmatic Programmer's Guide:

--class Proc ---
arity prc.arity -> anInteger

Returns the number of arguments required by the block. If the block
takes no arguments, returns -1. If it takes one argument, returns -2.
Otherwise, returns a positive argument count unless the last argument
is prefixed with *, in which case the argument count is negated. The
number of required arguments is anInteger for positive values, and
( anInteger +1).abs otherwise.

Proc.new {||}.arity » 0
Proc.new {|a|}.arity » -1
Proc.new {|a,b|}.arity » 2
Proc.new {|a,b,c|}.arity » 3
Proc.new {|*a|}.arity » -1
Proc.new {|a,*b|}.arity » -2

mh I het different results:
=> -1 #no args (as minimum)


about the -2.. dunno :(
 
D

Dan Doel

#arity seems to have been changed since that was written.

Seems to me it does this:

if #arity is negative (n < 0)

the minimum number of required parameters is (n + 1).abs

proc {|*a|}.arity #=> -1, can be called with 0 or more args
proc {|a,*b|}.arity #=> -2, can be called with 1 or more args

In the above, calling with 0 or 1 args respectively means a and b
respectively are [].

If #arity is positive or 0, the number of formal parameters is
exactly n.

proc {|a|}.arity #=> 1
proc {||}.arity #=> 0
proc {|a,b|}.arity #=> 2

Trying to pass a number of arguments other than n will be an error except in
the case of 1, where the arguments will be collected into an array and
placed in
the one parameter. However, methods of one parameter can only be called
with one argument (making them different in this regard from methods).

proc {}.arity #=> -1

This is because you can pass in any number of arguments and they'll be
ignored.
To specify 0 params and only 0 params, you need ||.

I think that's every possibility. If I've missed something let me know.
I'm working
with Ruby version 1.8.0 ms-win32 build.

- Dan
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

type at rubycentral? 4
wrong documentation 0
How to distinguish blocks of certain arity in 1.8 4
[DOCBUG] Proc#arity 6
True arity 7
each by arity 17
Tasks 1
Help with passing test 3

Members online

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,023
Latest member
websitedesig25

Latest Threads

Top