loop { break }
が正常に動作することができますが、閉包(Proc、lambda)で外ループを `中断する '方法は?
block = Proc.new { break }
# or
# block = lambda { break }
loop(&block) # => LocalJumpError: break from proc-closure
はblock variable
で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
をブロックと同じ動作するはずです(それはreturn
ブロックから関数ができる)が、私は理由を理解していませんループを壊すことはできません。
P.S.私の悪い英語のために申し訳ありません>〜<
これで何を達成したいですか? –
99%が関連しています:http://stackoverflow.com/questions/626/when-to-use-lambda-when-to-use-proc-new – tokland
@Sergio更新を見る、@tokland 'Proc。 'new'と' lambda'の間に 'closure'で' break'を尋ねています –