On 03/15/2018 03:16 AM, Andrey wrote:
Hello, is there way to declare read only field for class type with
ability to call inner non constant methods? i.e.:
class A {
int value = 12;
void updateValue() {
value = 13;
}
}
class B {
const A a;
this() {
a = new A();
a.updateValue(); // error: mutable method is not callable
using const object
}
}
Another option is assigning a pre-made A to the member:
class A {
int value = 12;
void updateValue() {
value = 13;
}
}
// Magic recipe is moved here:
A makeA() {
auto a = new A();
a.updateValue();
return a;
}
class B {
const A a;
this() {
a = makeA();
}
}
void main() {
auto b = new B();
}
Which can be compressed into a lambda in the constructor:
this() {
a = {
// This 'a' is a local variable inside the lambda:
auto a = new A();
a.updateValue();
return a;
}();
}
Ali