Thread overview | ||||||
---|---|---|---|---|---|---|
|
June 30, 2016 Associative array of const items | ||||
---|---|---|---|---|
| ||||
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? |
June 30, 2016 Re: Associative array of const items | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan Marler | 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.
|
July 01, 2016 Re: Associative array of const items | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jonathan Marler | 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?
You can use std.typecons.Rebindable!(const T)[K].
|
July 01, 2016 Re: Associative array of const items | ||||
---|---|---|---|---|
| ||||
Posted in reply to QAston | On Friday, 1 July 2016 at 06:57:59 UTC, QAston wrote:
> 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?
>
> You can use std.typecons.Rebindable!(const T)[K].
I think this may have been exactly what I was looking for. Cool that the language supports adding these kind of semantics through a library. I'll try it out and see if it works. Thanks for the tip.
|
Copyright © 1999-2021 by the D Language Foundation