digitalmars.D.learn - Associative array of const items
- Jonathan Marler (10/10) Jun 30 2016 Is there a way to have an associative array of const values? I
- Q. Schroll (12/22) Jun 30 2016 It is possible to initialize the array with a AA literal as
- QAston (2/12) Jun 30 2016 You can use std.typecons.Rebindable!(const T)[K].
- Jonathan Marler (5/20) Jul 01 2016 I think this may have been exactly what I was looking for. Cool
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?
Jun 30 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.
Jun 30 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?You can use std.typecons.Rebindable!(const T)[K].
Jun 30 2016
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: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.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].
Jul 01 2016