On Wednesday, 18 April 2018 at 09:41:48 UTC, Nick Treleaven wrote:
How do you implement this if the function returns with ref:

I understand where you are coming from, but I am not sure it is appropriate to shoehorn every use case into one api. I think actually what you are describing here is the AddOrUpdate style method https://msdn.microsoft.com/en-us/library/ee378665(v=vs.110).aspx

Perhaps the implementation could be:

void createOrUpdate(K, V)(ref V[K] aa, K key, V delegate() create, void delegate(V*) update);


    C newc;
    aa.createOrUpdate("key", {
        /* set *p */
        newc = new C;
        return newc;
    },
    (C* u){
        // read *p
        newc = *u;
        // set *p
        *u = new C;
    });
    assert(aa["key"] == newc);

¯\_(ツ)_/¯

Reply via email to