Code doesn't work - why?
Ali Çehreli via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Sep 17 10:34:46 PDT 2014
On 09/17/2014 03:42 AM, Robin wrote:> Hiho,
> However, I still do not understand why it didn't work for struct value
> types since I do not perform any mutations on the state objects during
> execution of the code.
I was a little sloppy with my response. :) What I suspected is still
correct though. The following are the mutations:
s0.addTransits(['0' : s1, '1' : s2]);
s1.addTransits(['0' : s0, '1' : s2]);
s2.addTransits(['0' : s2, '1' : s2]);
Note that s0 gets a copy of s1 before s1 knows about its transits.
> When value types are copied bitwise then the associative array should
> also be copied that way or at least point to the same mapping as the
> source and thus shouldn't be empty after copying.
There is an issue with uninitialized associative arrays: Although one
would think that both s1 copies would use the same AA, since the AA is
uninitialized, they would both initialize it first, having separate AAs.
This is a pretty nasty problem as it matters whether the AA had a single
record before the copy or not. :(
> What changes are required in order to make it work with struct value
> types as well?
I am ashamed to admit that I am not sure how to initialize an AA to the
empty state. I can do the following though: :)
this.transits['z'] = this;
this.transits.remove('z');
Ali
More information about the Digitalmars-d-learn
mailing list