Why do associative arrays return from opIndexAssign by value?
TommiT
tommitissari at hotmail.com
Tue Jun 18 02:18:33 PDT 2013
On Tuesday, 18 June 2013 at 09:07:31 UTC, deadalnix wrote:
> On Tuesday, 18 June 2013 at 09:03:27 UTC, TommiT wrote:
>> Associative arrays return from opIndexAssign the inserted or
>> existing element by value. Why don't they return it by
>> reference, which would be much more useful? Maybe not very
>> common, but here's an example of the kind of situation where I
>> actually would have needed it:
>>
>> int[string] values;
>>
>> foreach (string key; keys)
>> {
>> int* ptr = key in values;
>>
>> if (ptr == null)
>> {
>> // Currently cannot write this:
>> // ptr = &(values[key] = initValueFor(key));
>>
>> // The workaround is inefficient:
>> values[key] = initValueFor(key);
>> ptr = key in values;
>> }
>> edit(*ptr);
>> }
>
> Assignation aren't lvalues in general, so that is consistent.
I didn't see that coming. In C++ assignments are pretty
consistently mutable lvalues. Do you know why this is so in D?
More information about the Digitalmars-d
mailing list