我使用Ruby 1.8.7返回的东西。红宝石块和块
p = lambda { return 10;}
def lab(block)
puts 'before'
puts block.call
puts 'after'
end
lab p
以上代码的输出是
before
10
after
我重构相同的代码到这个
def lab(&block)
puts 'before'
puts block.call
puts 'after'
end
lab { return 10; }
现在我越来越LocalJumpError:意想不到的回报。
对我来说,这两个代码都在做同样的事情。是的,在第一种情况下,我通过了一个proc,而在第二种情况下,我通过了一个block。但&块将该块转换为proc。所以proc.call应该表现相同。
是的,我已经看到了这个帖子Using 'return' in a Ruby block
http://www.robertsosinski.com/2008/12/21/understanding-ruby-blocks-procs-and-lambdas/是一个非常好的写作。谢谢分享。 – 2010-05-14 20:45:05