"Eric Hodel" <drbrain / segment7.net> schrieb im Newsbeitrag
news:20030220231342.GH73411 / segment7.net...

> Robert (bob.news / gmx.net) wrote:
>
> > irb(main):144:0> procs = [
> > irb(main):145:1*   Proc.new{|a| p a},
> > irb(main):146:1*   Proc.new{|*a| p a},
> > irb(main):147:1*   Proc.new{|a,| p a},
> > irb(main):148:1*   Proc.new{|a,b| p a}
> > irb(main):149:1> ]
> >
> > 1) Why is it that "proc[0].arity = -1"?  Or put differently: To me it
seems
> > there is an asymmetry between proc[0].arity = proc[1].arity and the
behavior
> > of proc[0] that resembles more p[2].  If "proc[0].arity = 1" I would be
> > fine, but -1 puzzles me...
>
> -1 means 0 or more args, -2 means 1 or more args, etc

I know that, sorry if I wasn't clear enough. What bugs me is the fact that
the block with a single argument has negative arity, indicating that there
can be more arguments. Why then doesn't the block with two arguments have
arity -2, too?  Or otherwise, why doesn't the block with |a| have arity 1?

> > 2) Why does this parse "Proc.new{|a,| p a}"? (the comma with following
bar)
>
> the |...| construct is pretty much the same as multiple assignment with,
>
> a,b,c = [1,2,3]
>
> a, = [:a, :b, :c]

It just seemed strange to me that you can have a comma here but no
following enumerated element - especially since a block definition with
|a,| behaves differently from the one with |a|.

Regards

    robert