Assoc. Array and struct with immutable member

Dgame r.schuett.1987 at gmail.com
Tue Apr 17 12:45:03 UTC 2018


On Tuesday, 17 April 2018 at 11:38:17 UTC, Jonathan M Davis wrote:
> On Sunday, April 15, 2018 17:59:01 Dgame via 
> Digitalmars-d-learn wrote:
>> How am I supposed to insert a struct with immutable members 
>> into an assoc. array?
>>
>> Reduced example:
>> ----
>> struct A {
>>      immutable string name;
>> }
>>
>> A[string] as;
>> as["a"] = A("a"); // Does not work
>> ----
>
> I would point out that in general, having const or immutable 
> fields in a struct is a terrible idea. It causes all kinds of 
> problems because stuff like assignment doesn't work. If you 
> want the field to be read-only, you'll have far fewer problems 
> if you simply use a function to access it instead of making the 
> member public. e.g.
>
> struct A
> {
> public:
>
>     @property string name() { return _name; }
>
> private:
>
>     string _name;
> }
>
> The problem you're having here is just one example of the list 
> of things that don't work if you have a struct with immutable 
> members. It looks like the AA probably is doing something like 
> initializing the entry with A.init and then assigning it the 
> new value, and that's not going to work if the struct has 
> immutable members - which is exactly what the error message 
> says.
>
> - Jonathan M Davis

That's how I solved it. But it is troublesome and annoying 
because it increases the amount of manually work I have to do.


More information about the Digitalmars-d-learn mailing list