【发布时间】:2012-02-11 22:08:14
【问题描述】:
块的break语句(根据The 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
虽然以下代码不会抛出 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 调用的一种方式。此时的行为应该与第一个代码 sn-p 相同。
def iterator (p = Proc.new { puts "entering proc"; break})
...
end
免责声明:我是新手学习这门语言(ruby 1.9.2),因此希望得到参考和详细的概要。
【问题讨论】:
-
没有时间给出正确的答案,但这都是关于范围的,而不是 Proc 或 Lambda 的特殊性。
-
当您有时间...请再次访问此问题。我会很感激你的洞察力
-
代替
Proc.new试试lambda。 -
这是一个关于语言的一般问题;在实现中我会使用 lambda
标签: ruby-on-rails ruby proc-object