如何在闭包中"断开"外部循环(Proc,lambda)?

Steely Wing 6 ruby

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应该像块一样工作(它可以return是块中的函数),但我不明白为什么不能打破循环.

PS抱歉我的英文不好>〜<

Jazz.. 6

要解决这个问题,你可以

raise StopIteration

这对我有用.