For that matter also see this blog post and the discussion: <http://www.lukas-renggli.ch/blog/continue-break>. Lukas on Mate On Monday, November 8, 2010, Marcus Denker <marcus.denker@inria.fr> wrote:
On Nov 7, 2010, at 5:50 PM, Göran Krampe wrote:
On 11/07/2010 08:06 PM, Guillermo Polito wrote:
#anySatisfy: does not iterate over the entire collection either. Â So if you only want to know if there is one that satisfies the condition... this is the message you're looking for.
Cheers! Guille
And finally, a generic "trick" for breaking out of loops (not just iterations over collections):
Factor out the loop in a single method, then call it. When you want to break out, just do a normal return!
This often even makes the code more readable.
But speaking of tricks...
testValueWithExitBreak
    | val |
    [ :break |       1 to: 10 do: [ :i |             val := i.             i = 4 ifTrue: [break value].         ]     ] valueWithExit.
    self assert: val = 4.
testValueWithExitContinue
    | val last |     val := 0.
    1 to: 10 do: [ :i |         [ :continue |             i = 4 ifTrue: [continue value].             val := val + 1.             last := i         ] valueWithExit.     ].
    self assert: val = 9.     self assert: last = 10.
with
BlockClosure>>valueWithExit      self value: [ ^nil ]
-- Marcus Denker  -- http://www.marcusdenker.de INRIA Lille -- Nord Europe. Team RMoD.
-- Lukas Renggli www.lukas-renggli.ch