When will map/dict initialization be ready?

Paul Backus snarwin at gmail.com
Thu Apr 6 02:49:55 UTC 2023


On Thursday, 6 April 2023 at 01:53:31 UTC, John Xu wrote:
> I saw on doc:
>     https://dlang.org/spec/hash-map.html#static_initialization,
> that map/dict/associative array, still can't be initialized 
> like below:
>
>       NOTE: Not yet implemented.
>
>       immutable long[string] aa = [
>         "foo": 5,
>         "bar": 10,
>         "baz": 2000
>       ];
>
> I'm wondering when this is be ready? Python can write this way 
> long time ago.

Specifically, what doesn't work is initializing an associative 
array *at compile time*. You can use this syntax to initialize an 
AA at runtime, and it will work just fine.

For example:

     // Error - global variables are initialized at compile time
     long[string] globalAa = ["foo": 5, "bar": 10];

     void main()
     {
         // No error - local variables are initialized at runtime
         long[string] localAa = ["baz": 2000, "quux": 9999];
     }

To work around this limitation, you can initialize a global AA 
using a [static module constructor][1]. For example:

     long[string] globalAa;

     static this()
     {
         globalAa = ["foo": 5, "bar": 10];
     }

This will perform the initialization at runtime, during program 
startup (before calling `main`).

[1]: https://dlang.org/spec/module.html#staticorder


More information about the Digitalmars-d mailing list