Why don't lazy parameters bind to delegates? Was: Feature to get or add value to an associative array.

Giles Bathgate giles.bathgate at gmail.com
Fri Apr 20 22:46:54 UTC 2018


On Friday, 20 April 2018 at 22:21:13 UTC, Jonathan M Davis wrote:
> Honestly, I think that it's a terrible idea to special-case it 
> like that. If we want to argue for making it work in the 
> language, that's fine, but if we special-case it like this, 
> then it will work with some functions that have lazy parameters 
> and not others, and the result will be confusing. Besides, all 
> it takes to be able to pass a lamdba or delegate to a lazy 
> parameter is to actually call it when passing it. So, if you 
> add parens after the braces, it works. There's no need to go 
> and add a special case for it to the function.

Again lack of experience, so I presume you can just do:

bool inserted = false;
auto p = aa.getOrAdd("key", {inserted = true; return new Person; 
}());

I hadn't realised that until now. I enjoy your brutal honesty by 
the way ;)




More information about the Digitalmars-d mailing list