为什么 proc 不关心参数的数量?
Why doesn't a proc care about the number of arguments?
def method1(&proc)
proc.call(1,2,3)
end
method1{ |x,y,z,a| puts a}
不抛出任何错误并输出 nil
.
为什么不检查参数?这背后的逻辑是什么?
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:
For procs created using lambda or ->() an error is generated if the wrong number of parameters are passed to a Proc with multiple parameters. For procs created using Proc.new or Kernel.proc, extra parameters are silently discarded.
def method1(&proc)
proc.call(1,2,3)
end
method1{ |x,y,z,a| puts a}
不抛出任何错误并输出 nil
.
为什么不检查参数?这背后的逻辑是什么?
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:
For procs created using lambda or ->() an error is generated if the wrong number of parameters are passed to a Proc with multiple parameters. For procs created using Proc.new or Kernel.proc, extra parameters are silently discarded.