When are associative arrays meant to throw a RangeError?

Daniel Murphy yebblies at nospamgmail.com
Sun Feb 19 07:36:14 PST 2012


The call is rewriten to _aa_len(aa) and checks for null.

This can almost be done with a normal class, except the compiler inserts a 
null check into each member function, iirc.

I guess that's another bit of magic that can't be handled simply.

It can still be done with a struct:

struct AAPimpl
{
   AAImpl aa;
   size_t length() @property
   {
      if (!aa) return 0;
      return aa.length();
   }
}

I expect something like this will end up being the solution.

"Ben Davis" <entheh at cantab.net> wrote in message 
news:jhr4d1$2b4n$1 at digitalmars.com...
> On 19/02/2012 15:05, Daniel Murphy wrote:
>> "Ben Davis"<entheh at cantab.net>  wrote in message
>> news:jhr0qf$24sj$1 at digitalmars.com...
>>> On 19/02/2012 03:31, Daniel Murphy wrote:
>>>> Except for this magic initialization, AAs behave the same as classes - 
>>>> ie
>>>> a
>>>> reference type.
>>>
>>> That's not quite true, because 'length' is passed around by value
>>> alongside the reference, leading to semantics you could never reproduce
>>> with classes, unless I'm mistaken.
>>
>> AAs, not Arrays.
>
> Ah, well then I did this test earlier:
>
> int[string] assoc=null;
> writefln("%s",assoc.length);
> //prints 0
>
> Why did that work? 




More information about the Digitalmars-d mailing list