suggested change to foreach index
BCS
BCS at pathlink.com
Thu Jun 8 10:08:59 PDT 2006
Deewiant wrote:
> Sean Kelly wrote:
>
>>Deewiant wrote:
>>
>>>Sean Kelly wrote:
>>>
>>>> void main()
>>>> {
>>>> int i;
>>>> char[] arr = "abc def";
>>>>
>>>> foreach( i, c; arr )
>>>> {
>>>> printf( "%i\n", i );
>>>> if(' ' == c)
>>>> break;
>>>> }
>>>> printf( "\n%i\n", i );
>>>> }
>>>
>>>It creates a new scope, just like for loops:
>>>
>>>int i = 5;
>>>for (int i = 0; i < 3; ++i)
>>> writefln(i); // 0 to 2
>>>writefln(i); // 5
>>
>>Yes, but my example was equivalent to this (I thought):
>>
>> int i = 5;
>> for (i = 0; i < 3; ++i)
>> writefln(i); // 0 to 2
>> writefln(i); // 2
>>
>>ie, the lack of a type makes the "i=0" an assignment, not a declaration
>>with an initializer. The i from the surrounding scope is used. I
>>expected foreach to behave the same way, but apparently it doesn't.
>>
>
>
> I guess it's the type inference that makes it so confusing to some. Earlier,
> after all, we had to write:
>
> foreach (int i, char[] c; arr)
>
> Instead of the modern terse version:
>
> foreach (i, c; arr)
>
> In the longer version, it's presumably more clear that the i is a new "int i".
The suggested syntax
vvv
foreach([[inout] index,] value ; ...
seems a bit odd to me. How about use "alias" instead?
int i;
foreach(alias i, v; arr){}
More information about the Digitalmars-d
mailing list