loop { break }
kann gut funktionieren, aberWie man eine äußere Schleife in Schließung "bricht" (Proc, Lambda)?
block = Proc.new { break }
# or
# block = lambda { break }
loop(&block) # => LocalJumpError: break from proc-closure
Ist es möglich, break
in einem block variable
?
Update:
Ein Beispiel mehr erklären:
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)
Als mein Verständnis, Proc.new
sollte als Block gleiche Arbeit (es kann return
eine Funktion von Block), aber ich verstehe nicht, warum kann eine Schleife nicht brechen.
P.S. Entschuldigung für mein schlechtes Englisch> ~ <
Was möchten Sie damit erreichen? –
99% verwandt: http://stackoverflow.com/questions/626/when-to-use-lambada-when-to-use-proc-new – tokland
@Sergio Siehe Update, @tokland Ich kenne die verschiedenen in 'Proc. new' und 'lambda', ich frage' break' in 'closure' –