On May 27, 8:59 pm, Paul Brannan <pbran... / atdesk.com> wrote:
> Is this expected behavior?
>
> cout@bean:~$ ruby -v -e 'proc { || }.call 42'
> ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-linux]
> -e:1: wrong number of arguments (1 for 0) (ArgumentError)
>         from -e:1:in `call'
>         from -e:1
> cout@bean:~$ ruby1.9 -v -e 'proc { || }.call 42'
> ruby 1.9.0 (2007-05-26 patchlevel 0) [i686-linux]

1.9 gives no such error?
Seems as 1.8.6 is right on, yet on my system, under 1.8.5 (patchlevel
35):

irb(main):001:0> Proc.new{|a| p a}.call 69,70
(irb):9: warning: multiple values for a block parameter (2 for 1)
        from (irb):9
[69, 70]
=> nil
irb(main):002:0> Proc.new{|a,b| p a}.call 69,70,71
69
=> nil

Considering b isnt optional, i.e. specified  as "*b" (where b[1] ==
71)
Shouldn't this raise a 3 for 2 warning?

irb(main):003:0> def what(a,b)
irb(main):004:1>   p a
irb(main):005:1>   p b
irb(main):006:1> end
=> nil
irb(main):007:0> what(1,2,3)
ArgumentError: wrong number of arguments (3 for 2)
        from (irb):5:in `what'
        from (irb):5
        from :0



I understand that there are differences between a function definition
and a Proc object, but why are there differences in the way they treat
their arguments?