0

我认为当您在方法中调用 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)
4

2 回答 2

1

返回值

在你的第一句话应该读为

退货声明

使用return 66andreturn 55你会看到光明!

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

于 2011-12-04T17:53:58.330 回答
0

根据这个问题,它们在你的例子中应该表现得完全一样。唯一显着的区别是lambda在调用时检查参数的数量,而Proc.new吐出未定义的方法错误。

请注意,我不是 Ruby 专家。我阅读了您的问题,然后单击了侧边栏中看起来很有帮助的第一个“相关”链接。以后请仔细搜索。

于 2011-12-04T17:52:57.357 回答