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