Associative array of const items

Q. Schroll via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Jun 30 14:30:04 PDT 2016


On Thursday, 30 June 2016 at 17:08:45 UTC, Jonathan Marler wrote:
> Is there a way to have an associative array of const values? I 
> thought it would have been:
>
> const(T)[K] map;
> map[x] = y;
>
> but the second line gives Error: cannot modify const 
> expression.  I would think that the const(T)[K] would behave 
> similarly to const(T)[], where you can modify the array, just 
> not the individual elements, but associative arrays don't seem 
> to have the same semantics.  Is there a way to achieve these 
> semantics with an associative array?

It is possible to initialize the array with a AA literal as
     const(int)[string] aa = [ "1": 1, "2": 2 ];
but AAs don't have opIndexAssign etc.
The reasonable things you do to const(T)[] is shorten it or 
reassign it completely.
For an AA, this is removing elements or adding new ones. While 
the first is without problems, the problem is how to determine if 
aa["1"] = 1 is a (legal) initialization or (illegal) reassignment 
of a const(T). Unfortunately, there is no function to add 
key-value-pairs that throws an Error if the key is already there 
or else reinitializes the value.


More information about the Digitalmars-d-learn mailing list