当前位置:  开发笔记 > 后端 > 正文

为什么在Ruby中屈服于lambda splat数组参数?

如何解决《为什么在Ruby中屈服于lambdasplat数组参数?》经验,为你挑选了0个好方法。

在Ruby中,lambda使用错误数量的参数调用a会导致ArgumentError:

l = lambda { |a, b| p a: a, b: b }
l.call(1, 2) 
# {:a=>1, :b=>2}

l.call(1)
# ArgumentError: wrong number of arguments (given 1, expected 2)

传递数组也不起作用:(因为数组只是一个对象,对吧?)

l.call([3, 4])
# ArgumentError: wrong number of arguments (given 1, expected 2)

除非我使用splat(*)将数组转换为参数列表,否则我没有.

但是 ......如果我通过隐式调用lambda yield,会发生意外情况:

def yield_to
  yield(1, 2)
  yield([3, 4])
end

yield_to(&l)
# {:a=>1, :b=>2}
# {:a=>3, :b=>4}   <- array as argument list!?

更令人困惑的是,lambda派生的via Method#to_proc会按预期工作:

def m(a, b)
  p a: a, b: b
end

yield_to(&method(:m))
# {:a=>1, :b=>2}
# ArgumentError: wrong number of arguments (given 1, expected 2)

这里发生了什么?

推荐阅读
个性2402852463
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有