Bug in the array set operator

Ameer Armaly ameer_armaly at hotmail.com
Sat Jun 24 10:50:33 PDT 2006


"Sjoerd van Leent" <svanleent at gmail.com> wrote in message 
news:e7jt2l$175u$1 at digitaldaemon.com...
> roumen schreef:
>> I'm fairly certain that the code below should not work, but it compiles 
>> and
>> works OK. And if I use the "correct" statement a[0..a.length-1] = 0; it 
>> does not
>> set the last element.
>>
>> import std.stdio;
>> private int[5] a = [1, 2, 3, 4, 5];
>> void main(char[][] arg)
>> {
>> foreach (int n; a)
>> writef("%d ", n);
>> writefln();
>>
>> a[0..a.length] = 0;   // BUG: should be a.length-1
>>
>> foreach (int n; a)
>> writef("%d ", n);
>> writefln();
>> }
>>
>>
>
> It's the correct behaviour. You have to see this as the mathematical 
> expression: [a .. b)
>
In short, saying [a..$] means "go up to but not including $," which means 
all elements.  A bit confusing at first, but useful.
> In D, you can shorten your array statement as:
>
> a[0..$] = 0;
>
> Regards,
> Sjoerd 





More information about the Digitalmars-d mailing list