loop { break }
can work fine, but
block = Proc.new { break }
# or
# block = lambda { break }
loop(&block) # => LocalJumpError: break from proc-closure
在块变量中使用break
是否可行?
更新:
以下是一个例子,以进一步说明:
def odd_loop
i = 1
loop do
yield i
i += 2
end
end
def even_loop
i = 2
loop do
yield i
i += 2
end
end
# This work
odd_loop do |i|
puts i
break if i > 10
end
# This doesn't work
break_greater_10 = Proc.new do |i|
puts i
break if i > 10
end
odd_loop(&break_greater_10) # break from proc-closure (LocalJumpError)
even_loop(&break_greater_10) # break from proc-closure (LocalJumpError)
据我理解,Proc.new
应该与块相同(它可以从块中返回一个函数),但我不明白为什么无法退出循环。
P.S. 很抱歉我的英语不好 >~<
Proc.new
和lambda
的区别,我在问closure
中的break
。 - Steely Wing