About foreach loops

KennyTM~ kennytm at gmail.com
Wed Jun 15 07:44:18 PDT 2011


On Jun 15, 11 22:35, Caligo wrote:
> You can create a temporary if you like:
>
>    foreach(i; 0..10){
>      int ii = i + 1;
>      writeln(ii, " ");
>    }
>
> Which outputs:
> 1 2 3 4 5 6 7 8 9 10
>
>
> The problem with trying to "fix" foreach is that it would create
> problems of its own.  The following code would not behave correctly:
>
>    foreach(i; 0..10){
>      if(i&  1)
>        i += 1;
>      writeln(i, " is even.");
>    }
>
> not to mention all the code that's already using foreach.

If the code rely on the 'implicit ref' behavior of 'i', the code is 
doing it wrong. The spec never mentioned what happened when the variable 
is modified in a ForeachRangeStatement. I believe it is more sane if 
modifying 'i' is disallowed unless 'ref' is used.


More information about the Digitalmars-d mailing list