新手问题 请问 Ruby 中 Proc 和 Lambda 的区别,它们分别会在什么时候会用到,能举个例子吗?

whitecrow · 2012年07月22日 · 最后由 lyfi2003 回复于 2012年07月23日 · 5105 次阅读

我看了一些相关的书籍和博文,但是感觉还是不太理解。多谢大牛的答疑。

Return 不一样 具体可以问 google

除了 LX 说的 return 还有是对参数的检查方式不同

假设两者都定义了 2 个参数,但在实际调用时,只传一个的话,lambda 会报错,Proc 将缺失的参数设为 nil,然后正常调用

1.9.3p194 :025 > p = Proc.new { |a, b| [a, b] }
 => #<Proc:0x007ffaa1989bc8@(irb):25> 
1.9.3p194 :026 > l = lambda { |a, b| [a, b] }
 => #<Proc:0x007ffaa1991940@(irb):26 (lambda)> 
1.9.3p194 :027 > 
1.9.3p194 :028 >   p.call(1)
 => [1, nil] 
1.9.3p194 :029 > l.call(1)
ArgumentError: wrong number of arguments (1 for 2)
    from (irb):26:in `block in irb_binding'
    from (irb):29:in `call'
    from (irb):29

@HungYuHei 非常感谢 :) 已明白

Ruby for Rails 第 13 章有上面两点都有详细介绍。

我写过一篇分析的文章: http://ruby-windy.iteye.com/blog/1197302 理解 block 的本质

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