还有另一个proc与lambda的讨论

时间:2011-12-04 17:45:25

标签: ruby lambda proc-object

我想当你在一个方法中调用一个proc时,proc的返回值会触发从调用proc的out块上下文返回。当我调用test(a_block)时,我觉得puts "after the block"不应该执行,因为proc有一个返回值。此外...... test(a_block)test(b_block)表现完全相同。我觉得这里应该有区别吗?

a_block = Proc.new do
  puts "in the Proc"
  55
end

b_block = lambda do 
  puts "in the lambda"
  66
end

def test(block)

  puts "in test"
  puts block.call
  puts "after the block"
  99 
end

puts test(a_block)
puts test(b_block)

2 个答案:

答案 0 :(得分:1)

  

返回值

第一句中的

应为

  

退货声明

使用return 66return 55,你会看到光!

关于Ruby闭包的一个很好的调查可以在这里找到:http://innig.net/software/ruby/closures-in-ruby.rb

答案 1 :(得分:0)

根据this question,它们在您的示例中应该完全相同。唯一值得注意的区别是lambda在调用时检查参数的数量,而Proc.new则吐出未定义的方法错误。

请注意,我不是专家Ruby-ist。我看了你的问题,然后点击侧边栏中看起来很有帮助的第一个“相关”链接。请在将来仔细搜索。