为什么proc不关心参数的数量?

时间:2016-11-20 17:49:36

标签: ruby proc

def method1(&proc)
  proc.call(1,2,3)
end

method1{ |x,y,z,a| puts a}

不会抛出任何错误并输出nil

为什么不检查参数?它背后的逻辑是什么?

1 个答案:

答案 0 :(得分:2)

Proc并不关心验证正确数量的参数,但是lambda做了......

def method1(&proc)
  proc.call(1,2,3)
end

method1 { |x,y,z,a| puts a}
method1 lambda { |x,y,z,a| puts a }

结果:

lambda.rb:1:in `method1': wrong number of arguments (given 1, expected 0) (ArgumentError)
    from lambda.rb:6:in `<main>'

来自ruby docs

  

对于使用lambda或 - &gt;()创建的proc,如果将错误数量的参数传递给具有多个参数的Proc,则会生成错误。对于使用Proc.new或Kernel.proc创建的proc,会以静默方式丢弃额外的参数。