Proposal: property 'fetch' for AA

Bill Baxter dnewsgroup at billbaxter.com
Fri May 4 00:16:54 PDT 2007


Oskar Linde wrote:
> eao197 skrev:
>> Ruby's Hash has a handy method 'fetch'[1] which allows to extract 
>> value from Hash or, if value is missed, use some default value:
> 
>> If D's AA would have property 'fetch' it would allow to write:
>>
>> int[char] h;
>> h[ 'a' ] = 1;
>> auto a = h.fetch( 'a', 0 );
>> auto b = h.fetch( 'b', 10 );
>>
>> instead of:
>>
>> V fetch(K,V)( V[K] h, K key, V default_value )
>> {
>>   if( key in h )
>>     return h[key];
>>   return default_value;
>> }
> 
> A slightly different version I've been using:
> 
> T get(T,U)(T[U] aa, U key) {
>         T* ptr = key in aa;
>         if (ptr)
>                 return *ptr;
>         return T.init;
> }
> 
> T get(T,U, int dummy = 1)(T[U] aa, U key, lazy T defaultValue) {
>         T* ptr = key in aa;
>         if (ptr)
>             return *ptr;
>         return defaultValue;
> }
> 
> and
> 
> T getCached(T,U)(T[U] aa, U key, lazy T computedValue) {
>     T* ptr = key in aa;
>     if (ptr)
>         return *ptr;
>     T val = computedValue;
>     aa[key] = val;
>     return val;
> }
> 
> The latter one could probly use a better name, but the idea is to 
> conveniently be able to use an AA as a cache for expensive computations.
> 
> /Oskar

In python those two are called 'get' and 'setdefault'.
Not that I think those are the best names in the world.

--bb



More information about the Digitalmars-d mailing list