Sal*_*cha 8 ruby ruby-on-rails proc-object
块的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"; break})
...
end
Run Code Online (Sandbox Code Playgroud)
免责声明:我是新手学习语言(ruby 1.9.2),因此将欣赏参考资料和详细的概要.
break使块和块的调用者返回.在以下代码中:
proc = Proc.new { break }
Run Code Online (Sandbox Code Playgroud)
转换为Proc对象的块的"调用者"是Proc.new.break应该让块的调用者返回,但Proc.new已经返回.
在这段代码中:
def iterator(&b); b.call; end
iterator { break }
Run Code Online (Sandbox Code Playgroud)
块的调用者是iterator,所以它iterator返回.
| 归档时间: |
|
| 查看次数: |
2603 次 |
| 最近记录: |