该代码按预期工作(什么都不做,甚至不会产生警告/错误):
l = lambda {|i|} l.call(1)
此代码产生警告(警告:块参数的多个值(0为1)):
l = lambda {|i|} l.call
并且这个代码失败并出现错误(ArgumentError:参数数量错误(0为2)):
l = lambda {|i,y|} l.call
我以为lambda需要传递所有的参数.
从第二个例子我看到它不是.为什么只有一个参数被赋予并且按照预期的方式工作(失败与错误)多个参数?
PS:ruby 1.8.6(2008-08-11 patchlevel 287)[universal-darwin9.0]
更新:我用ruby 1.9.1p376检查了这些样本.它的工作原理如下 – 第二个例子也会产生错误.看起来这是1.8版本的功能(或<= 1.8)
解决方法
兰布斯很奇怪,当你有不到两个参数时,他们的行为是不同的.查看
this article了解更多信息.