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.