Wow, a break yielding a value from within a loop is awesome! Do any other langs have that?
x = (1..100).each do |i|
if i > 9
break i
end
end
Evaluating that gives > x
=> 10
You can also supply a value to next within a loop, which is occasionally useful (block outer
(loop for i from 0 return 100) ; 100 returned from LOOP
(print "This will print")
200) ==> 200
(block outer
(loop for i from 0 do (return-from outer 100)) ; 100 returned from BLOCK
(print "This won't print")
200) ==> 100
[0] - http://www.gigamonkeys.com/book/loop-for-black-belts.htmlEDIT: I always do formatting wrong on here.
CL-USER> (loop for i from 1 below 10
sum i
when (= i 6)
do (loop-finish))
21have code around my app doing things like:
loop do
code = random_string(6)
break code unless code_already_used?(code)
end