Breaking out of multiple loops

monarch_dodra monarchdodra at gmail.com
Wed Sep 5 08:20:38 PDT 2012


On Wednesday, 5 September 2012 at 15:12:11 UTC, Jose Armando 
Garcia wrote:
> On Sep 5, 2012, at 6:13, "Regan Heath" <regan at netmail.co.nz> 
> wrote:
>
>> On Wed, 05 Sep 2012 13:55:32 +0100, monarch_dodra 
>> <monarchdodra at gmail.com
>> > wrote:
>>
>>> On Wednesday, 5 September 2012 at 12:43:26 UTC, Piotr 
>>> Szturmaj wrote:
>>>> Michel Colman wrote:
>>>>> I have a very simple suggestion for breaking out of nested 
>>>>> loops.
>>>>
>>>> I think it's already there: 
>>>> http://dlang.org/statement.html#BreakStatement
>>>>
>>>> "If break is followed by Identifier, the Identifier must be 
>>>> the label of an enclosing while, for, do or switch 
>>>> statement, and that statement is exited. It is an error if 
>>>> there is no such statement."
>>>
>>> I really wish there was a simple "break from current scope" 
>>> command. It would be kinda like "goto end of scope", just 
>>> cleaner...
>>
>> You can lodge an enhancement request, example code:
>>
>> void main()
>> {
>>   label: {
>>     // ..code..
>>     writefln("code1");
>>     writefln("break..");
>>     break label;  // jumps to "here:"
>>     // ..code..
>>     writefln("code2");
>>   }
>>   // break lands here
>>   writefln("here");
>> }
>>
>> Current error:
>> test.d(nn): Error: enclosing label 'label' for break not found
>>
>> In fact, as any BlockStatement can be labeled you can argue 
>> any BlockStatement label should be 'breakable'.
>>
>
> Haven't tried it but this maybe implementable using templates, 
> try and catch.
>
> I say this because Scala, being a "functional" language 
> implements this as a library using closure, high order 
> function, try, catch and throw. Maybe a few other features.
>
> -jose
>> R
>>
>> --
>> Using Opera's revolutionary email client: 
>> http://www.opera.com/mail/

It is implementable with a simple "label: do{}while(false);" 
actually.

... Or a goto ...


More information about the Digitalmars-d mailing list