我想当你在一个方法中调用一个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)
答案 0 :(得分:1)
第一句中的返回值
应为
退货声明
使用return 66
和return 55
,你会看到光!
关于Ruby闭包的一个很好的调查可以在这里找到:http://innig.net/software/ruby/closures-in-ruby.rb
答案 1 :(得分:0)
根据this question,它们在您的示例中应该完全相同。唯一值得注意的区别是lambda
在调用时检查参数的数量,而Proc.new
则吐出未定义的方法错误。
请注意,我不是专家Ruby-ist。我看了你的问题,然后点击侧边栏中看起来很有帮助的第一个“相关”链接。请在将来仔细搜索。