Daniel Keep wrote:

No; read the code.  Before the put, a and b are pointing to the same
span of memory.  a.put(5) puts the value 5 into the front (first
element) of the array, then advances the array.

However, put can't "see" b, so it doesn't get updated along with a.  The
end result is that b = [5,2,3] and a = b[1..3] = [2,3].

Why do it like this?  Here's an example:

void putNumbers(Range)(Range r)
{
    int i = 0;
    while( !r.empty )
    {
        r.put(i);
        ++i;
    }
}

void main()
{
    int[10] ten_numbers;
    putNumbers(ten_numbers);
    assert( ten_numbers = [0,1,2,3,4,5,6,7,8,9] );
}

I see.

Your example should be in the documentation in my opinion, rather
then the meaningless one that's there now. Something like this
perhaps:

void putNumbers(Range, T)(Range r, T start, T incr) {
    T i = start;
    while( !r.empty )
    {
        r.put(i);
        i += incr;
    }
}

void main() {
   int[10] ten_ints;
   putNumbers!(int[])(ten_ints, 4, 2);
   assert( ten_ints == [4,6,8,10,12,14,16,18,20,22] );
}

Jos


Reply via email to