Forum: Ruby type at rubycentral?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Schüle Daniel (Guest)
on 2006-03-08 17:04
(Received via mailing list)
Hello


  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		### <<< error?
Proc.new {|a,b|}.arity 	» 	2
Proc.new {|a,b,c|}.arity 	» 	3
Proc.new {|*a|}.arity 	» 	-1
Proc.new {|a,*b|}.arity 	» 	-2


I would say it's a typo

Regards, Daniel
Schüle Daniel (Guest)
on 2006-03-08 17:11
(Received via mailing list)
and one case is missing there

irb(main):169:0> proc{}.arity
=> -1

which means, all paramers are ignored(right?)
Schüle Daniel (Guest)
on 2006-03-08 19:31
(Received via mailing list)
James B. (Guest)
on 2006-03-08 20:15
(Received via mailing list)
Schüle Daniel wrote:
> I forgot to copy&paste the link
>
> http://www.rubycentral.com/book/ref_c_proc.html#Proc.arity
>
>
>


I believe that page refers to Ruby 1.6.

See the docs for 1.8.4:

http://www.ruby-doc.org/core/classes/Proc.html#M000808



--
James B.

http://web2.0validator.com    - We're the Dot in Web 2.0
http://refreshingcities.org   - Design, technology, usability
http://yourelevatorpitch.com  - Finding Business Focus
http://www.jamesbritt.com     - Playing with Better Toys
Logan C. (Guest)
on 2006-03-08 20:30
(Received via mailing list)
On Mar 8, 2006, at 10:08 AM, Schüle Daniel wrote:

> and one case is missing there
>
> irb(main):169:0> proc{}.arity
> => -1
>
> which means, all paramers are ignored(right?)
>
>

Negative arities indicate the _minimum_ number of args to a proc that
takes a variable number of args

min args = abs(arity + 1) if arity < 0 otherwise arity


so a proc with no arg speciafication is the same as proc { |*args| }.
(You just can't get at the argument list)

proc { |a, *b| } will have an arity of -2

abs(-2 + 1) = 1 so it must be passed at least one arg

proc { |a, b, c| } will have an arity of 3

proc { || } will have an artity of zero (contrasted with proc {  } )
This topic is locked and can not be replied to.