+= on associative arrays leads to surprising result
berni
someone at somewhere.com
Tue Aug 27 16:12:07 UTC 2019
> import std.stdio;
>
> void main()
> {
> real[int] a;
> a[0] += 100;
> writeln(a);
> }
results (independed of the used compiler) in
> [0:100]
I was a little bit surprised, because a[0] += 100 should be the
same as a[0] = a[0]+100, which leads to a range violation error.
Furthermore, as we work with real, I'd expected the result to be
NaN...
Is this a bug? I ask, because it would be quite convenient to use
it the way it works now.
An alternative I found, would be to use object.update. But there
I've to declare the 100 twice which results in code duplication:
> a.update(0,()=>100.0L,(ref real v)=>v+100.0L);
Hence, my best solution needs two lines:
> if (0 !in a) a[0] = 0;
> a[0] += 100;
What's your oppinion on this?
More information about the Digitalmars-d-learn
mailing list