块的 break 语句(根据 Ruby 编程语言)定义如下:
它使块返回到它的迭代器,而迭代器返回到调用它的方法。
因此,当运行以下代码时,会导致 LocalJumpError。
def test
puts "entering test method"
proc = Proc.new { puts "entering proc"; break }
proc.call # LocalJumpError: iterator has already returned
puts "exiting test method"
end
test
虽然以下代码不会引发 LocalJumpError。& 符号有什么特别之处?& 符号不是隐式使用 Proc.new 吗?
def iterator(&proc)
puts "entering iterator"
proc.call # invoke the proc
puts "exiting iterator" # Never executed if the proc breaks
end
def test
iterator { puts "entering proc"; break }
end
test
换句话说,我将 & 符号作为内联 Proc.new 调用的一种方式。此时行为应该与第一个代码片段相同。
def iterator (p = Proc.new { puts "entering proc"; break})
...
end
免责声明:我是学习语言的新手(ruby 1.9.2),因此会欣赏参考资料和详细的概要。