Ruby 请教一个关于 Proc 的问题

galo · 2014年12月12日 · 最后由 galo 回复于 2014年12月12日 · 1838 次阅读

各位大大,我最近初学 ruby,发现一个奇怪的问题。我看书上讲可以将 Proc 对象前面加上&,作为 block 传递给方法。 pr1 = Proc.new {puts "hello"} 5.times &pr1 这两行可以成功运行,输出五行 hello 但是,我试了 Proc 对象的 lambda 定义方法 pr2 = lambda {puts "hello"} 5.times &pr2 程序报错了:“ArgumentError: wrong number of arguments (1 for 0)”,说参数不对。 我想了很久没明白,请教各位大大是怎么回事,谢谢。

你把pr2 改成 pr2 = lambda{|i| puts "hello"} 再试试

From ri Kernel#lambda:

Equivalent to Proc.new, except the resulting Proc objects check the number of parameters passed when called.

http://stackoverflow.com/questions/1740046/whats-the-difference-between-a-proc-and-a-lambda-in-ruby

原因就是 5.times 调用 block 的时候会传参数进去 Proc.new 是不检查参数的 所以可以运行 而 lambda 是检查参数的 你传来一个参数但是这个 block 中没有定义参数 就报错了

#2 楼 @raven 受教,谢谢了!

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