[英]How to `break` a outside loop in closure (Proc, lambda)?
loop { break }
可以正常工作,但是
block = Proc.new { break }
# or
# block = lambda { break }
loop(&block) # => LocalJumpError: break from proc-closure
是否有可能break
一個block variable
?
更新:
一個例子來解釋更多:
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
應該與block一樣工作(它可以從塊return
一個函數),但我不明白為什么不能打破循環。
PS抱歉我的英文不好>〜<
要解決這個問題,你可以
raise StopIteration
這對我有用。
要從塊返回,您可以使用next
關鍵字。
def foo
f = Proc.new {next ; p 1}
f.call
return 'hello'
end
puts foo # => 'hello' , without 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.