Arity?

Discussion in 'Ruby' started by Jon A. Lambert, Dec 15, 2003.

  1. 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.

    ----

    I can make neither head nor tail of this as the values that are actually returned
    are not those in the example, and the text doesn't appear to make any sense at
    all to me. Can someone explain what arity means and how it's determined?

    --
    J. Lambert
    Jon A. Lambert, Dec 15, 2003
    #1
    1. Advertising

  2. il Mon, 15 Dec 2003 09:52:50 +0900, "Jon A. Lambert"
    <> ha scritto::

    >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:

    >> Proc.new do end.arity

    => -1 # no args
    >> Proc.new do|| end.arity

    => 0 #0 args
    >> Proc.new do|one| end.arity

    => 1 #one arg
    >> Proc.new do|one,two| end.arity

    => 2 #two arg
    >> Proc.new do|*maybenoargs| end.arity

    => -1 #no args (as minimum)


    about the -2.. dunno :(
    gabriele renzi, Dec 15, 2003
    #2
    1. Advertising

  3. Jon A. Lambert

    Dan Doel Guest

    #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
    Dan Doel, Dec 15, 2003
    #3
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Howard Gardner
    Replies:
    4
    Views:
    342
    Howard Gardner
    Jul 20, 2006
  2. Michael Feathers
    Replies:
    3
    Views:
    280
    Roland Pibinger
    Aug 4, 2006
  3. ðÅÔÒÏ× áÌÅËÓÁÎÄÒ

    Why the expression "(1)" is not an one-arity tuple, but int ?

    ðÅÔÒÏ× áÌÅËÓÁÎÄÒ, Dec 4, 2009, in forum: Python
    Replies:
    0
    Views:
    262
    ðÅÔÒÏ× áÌÅËÓÁÎÄÒ
    Dec 4, 2009
  4. Jeff Mitchell

    getting the arity

    Jeff Mitchell, Aug 28, 2003, in forum: Ruby
    Replies:
    1
    Views:
    82
    Harry Ohlsen
    Aug 28, 2003
  5. Simon Strandgaard
    Replies:
    4
    Views:
    100
    Dan Doel
    Oct 29, 2003
Loading...

Share This Page