Feature to get or add value to an associative array.
Nick Treleaven
nick at geany.org
Wed Apr 18 09:41:48 UTC 2018
On Tuesday, 17 April 2018 at 20:49:30 UTC, Steven Schveighoffer
wrote:
> Why do you think it's less efficient to use a lazy parameter?
Wouldn't an extra function call have to happen, at least in some
cases?
>> This pattern needs a pointer to be returned, instead of using
>> `ref`. Note that `&inserted` is valid in @safe code, but only
>> with -dip1000. I called the function `slot` because it always
>> returns the address of the slot which the value is stored in.
> Returning ref makes more sense to me -- you are never going to
> return null.
How do you implement this if the function returns with ref:
bool inserted;
auto p = aa.slot("key", &inserted);
if (inserted) {
...
// set *p
}
else {
// read *p
...
// set *p
}
There is a common basic use case for this - counting the
occurrence of a key in a data set. If the key doesn't exist,
initialize and insert the value. *Iff* it does exist, increment
the value - I don't think you can do this without functional
contortions with your ref return.
(A side benefit is that returning a pointer is consistent with
`in`.)
More information about the Digitalmars-d
mailing list