新手问题 lambda 一个不合理的地方

ane · 2013年12月17日 · 最后由 LiKour 回复于 2013年12月18日 · 2996 次阅读

代码是这样的

a = lambda{|x,y| print x,y}
a.call(1)//报错
a.call(1,2)//ok
a.call(1,2,3)//报错

还没认真研究 lambda 的实现代码,可我觉得这个再 java 里多了参数或少了参数报错,我是可以认同的。但在 ruby 里,

既然 lambda 表现的就和方法一样,那 a.call(1),我希望它输出的应该是 “1,nil”,a.(1,2,3) 打印要么 “1,2”,要么 “1,[2,3]”

然后自己写了这样的 code

def fol(x,y)
 puts "hello"
end
fol(1)//报错
fol(1,2)//ok
fol(1,2,3)//报错

看来的确 lambda 表现的就和方法一样。 而且异常都一样 ArgumentError: wrong number of arguments

具体我没有深究,难道是 y 木有设置默认值. ruby 方法中至少要写成

def fol(x,y=nil)
end

你应该用 proc lambda 就是要求参数与声明一致

lambda{|x, y=1| ... } lambda{|x, *y| ... } 也是可以的

这是非常合理的啊,正如楼上所说,参数与声明必须一致,这在其他的语言中也都是一样的吧,有不一样的例子吗?

不错

楼主没有研究过 Proc 和 Lambda 的区别。 另外 楼主难不成是写 Javascript 出身的??参数和声明一致存在于大多数动态语言里啊。。

照楼主说法 既然 lambda 实际上也是方法那么 匿名参数就没有用啦

这几天正在看《ruby 元编程》,里面详细讲到了 lambda 和 proc 的区别,建议楼主看看,你需要的功能更适合用 proc

哥们,能换个头像么。。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册