On Tuesday, 16 April 2013 at 05:37:48 UTC, Tofu Ninja wrote:
I could not think of what to call this because I don't know if
it has a name to call it by.
Basicly what I was wondering is if their was a way in D to make
a class function pass the object being called on by reference.
might be easier to show code, basically I want something like
this to be possible
class A
{
//some how signify that this function passes 'this' by
reference
public void replace()
{
this = new A();
}
}
...
A a = new A();
A b = a;
b.replace();
assert(b != a);
I don't know if I am being clear or if their is something
better to call this.
Thanks for the help
Tofu
A member function cannot modify it's own 'this' pointer.
However, a free function can do it happily, which when combined
with UFCS gives you the same syntax and behaviour:
class A {
//......
}
void replace(ref A a)
{
a = new A();
}
void main() {
A a = new A();
A b = a;
assert(b is a);
b.replace();
assert(!(b is a));
}
http://dpaste.dzfl.pl/147f69e1