On Wednesday, 14 July 2021 at 23:16:05 UTC, Dylan Graham wrote:
... init-only-setters like in C#, wherein at the end of construction or duplication, the init lambda for the field is called, and the field can be set that once.

This has been implemented with `get_compute`. Example:
```D
alias MyRecord = record!(
    get!(int, "x", () => 20),
// get_compute lets you compute a field after the rest have been initialised
    get_compute!(float, "y", (rec) => rec.x * 2f)
);

auto r = new MyRecord;
writeln(r); // {x = 20, y = 40f}
r = new MyRecord(10);
writeln(r); // {x = 10, y = 20f}
r = MyRecord.create!"x"(5);
writeln(r); // {x = 5, y = 10f}
auto q = r.duplicate!"x"(2);
writeln(q); // {x = 2, y = 4f}
```

Reply via email to