块的break语句(根据Ruby Programming Language)定义如下:
它导致块返回到它的迭代器,迭代器返回到调用它的方法.
因此,当运行以下代码时,它会导致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
Run Code Online (Sandbox Code Playgroud)
虽然以下代码不会抛出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
Run Code Online (Sandbox Code Playgroud)
换句话说,我读了&符号作为进入Proc.new呼叫的手段.此时行为应该与第一个代码段相同.
def iterator (p = Proc.new { puts "entering proc"; …
Run Code Online (Sandbox Code Playgroud)