On Sunday, 11 September 2022 at 21:01:27 UTC, Salih Dincer wrote:
On Saturday, 10 September 2022 at 16:33:03 UTC, Erdem Demir wrote:
I wish I could use ref DListOfA returnVal = .... but we can't in D.

Can you please suggest alternatives?

I think you should try advanced update. Your flexibility and what you can do are limited by your dreams. A couple delicious code:

```d
import object, std.container;

struct A
{
    double val;
    bool isBig;
}

void main()
{
    alias  DListOfA = DList!A;
    DListOfA returnVal;
    //DListOfA[string] temp;/*
    DListOfA[string] temp = [
        "a": DListOfA( A(0) )
    ];//*/
    
    auto a = A(6, true); // replacement element
    temp.update("a", {
       return DListOfA( A(0) ); // not updated: unsucceeded but initialized
    }, (ref DListOfA v) {
        v = DListOfA( a ); // existing v has been replaced
        returnVal = v;
        assert(returnVal.front == a);
    });
    assert(is(typeof(temp["a"]) == DList!A));
}
```
SDB@79

I really like the possibilities of update as well but the overhead is too much especially in this example. I am sorry to say I found old "in" usage less complicated than that even I think "in" is complicated. I liked the Steven's solution all this code can be done via 2 lines only.


Reply via email to