On 9/12/16 4:11 PM, Ali Çehreli wrote:
On 09/10/2016 10:44 PM, Yuxuan Shui wrote:
I recently noticed nested struct capture its context by reference
(which, BTW, is not mentioned at all here:
https://dlang.org/spec/struct.html#nested).

" It has access to the context of its enclosing scope (via an added hidden field)."

It needs to be a reference. Otherwise, you store the entire stack frame in the struct? That wouldn't be a "field". It also has write access to the context:

void foo()
{
    int i;
    struct S {
       void changeI(int newVal) { i = newVal; }
    }

    S s;
    s.changeI(10);
    assert(i == 10);
}

The documentation could be clearer.

And bliting a struct
obviously doesn't do a deep copy of its context.

So my question is, is there a way to deep copy the context of a struct?

Can you show a small example? This seems to work:

auto foo(int i) {
    struct S {
        int foo() {
            return i;
        }
    }

    return S();
}

void main() {
    auto s = foo(42);
    auto s_copy = s;
    assert(s.foo() == 42);
    assert(s_copy.foo() == 42);
}

He wants to deep-copy the struct, meaning copy the context pointer data. Meaning if you change 'i' in s, then s_copy's foo still returns 42.

I don't think it is or should be doable.

-Steve

Reply via email to