On Wednesday, 6 August 2014 at 04:14:51 UTC, Puming wrote:
On Thursday, 31 July 2014 at 10:22:28 UTC, Marc Schütz wrote:
On Thursday, 31 July 2014 at 02:03:37 UTC, Puming wrote:
1. Are AAs reference type? if so, why does the compiler copy it?

This is probably your problem. They are reference types, but initially that reference is `null`. When you write:

   auto cmds = CONFIG.commands;

`cmds` contains a copy of the `null` value. On assignment, the actual AA is created, and assigned to `cmds`, but not back to `CONFIG.commands`. Try initializing the AA in your class constructor.

I checked the code and could concur your suggestion.

What I found strange were:

1. The only way that I can initialize it is to assign a value. But I want to initialize an empty AA, is that possible?

I don't know whether there is a way currently. The obvious `CONFIG.commands = []` produces an error: "can't have associative array key of void". This is likely a restriction of the current implementation of AAs, which is known to be suboptimal and being reworked slowly.


2. CONFIG.commands is not `null` before initialized, it is '[]'(when I writeln it).

That's just how writeln prints empty AAs. Try `writeln(cmds is null)`, it will print "true".

But it still behave like what you described (except that it won't produce an NullPointer Exception.

Because the runtime checks whether they are null, and allocates memory if necessary.

Reply via email to