loop { break } 可以正常工作,但是
block = Proc.new { break }
# or
# block = lambda { break }
loop(&block) # => LocalJumpError: break from proc-closure
Run Code Online (Sandbox Code Playgroud)
有可能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)
Run Code Online (Sandbox Code Playgroud)
作为我的理解,Proc.new应该像块一样工作(它可以return是块中的函数),但我不明白为什么不能打破循环.
PS抱歉我的英文不好>〜<
要从块返回,您可以使用next关键字。
def foo
f = Proc.new {next ; p 1}
f.call
return 'hello'
end
puts foo # => 'hello' , without 1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2673 次 |
| 最近记录: |