def method1(&proc)
proc.call(1,2,3)
end
method1{ |x,y,z,a| puts a}
不会抛出任何错误并输出nil
。
为什么不检查参数?它背后的逻辑是什么?
答案 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,会以静默方式丢弃额外的参数。