I've always though of arrays and associative arrays as structs (which really is what they are.) Thinking that way, this behavior makes exact sense - down to .length being unchangeable and associative arrays being unchangeable.

I mean, you wouldn't want to make it work the way you suggest by making arrays and associative arrays simply pointers to their current structs (just like a class would be.) You could make such a class easily yourself, anyway.

If you are right, I guess the right solution would be to make the ref implicit when returning (or, I suppose, passing?) such arrays and associative arrays. But that seems wrong to me too, and wouldn't come free (speaking of efficiency) either.

-[Unknown]


Steven Schveighoffer wrote:
On Sun, 03 May 2009 05:25:09 -0400, Unknown W. Brackets <[email protected]> wrote:

This code works fine (D 2.x only):

class Test
{
   private int[int] _testMap;
   public ref int[int] testMap() {return _testMap;}
}

void main()
{
   Test test = new Test();
   test.testMap[0] = 1;
}

Note the "ref". Otherwise, a value is returned which is not modifiable. This will also fix test.array.length. Nothing wrong here, no creepy bad temporary property problems.

The original code should work, this is a problem. An AA is not a value type.

-Steve

Reply via email to