On Monday, 22 January 2024 at 08:35:01 UTC, Joel wrote:
I've lost interest in the video, looks like horrible syntax (F#).

Nonetheless, this usually used with Objects (new class/struct instances), like so:
```d
import std;

struct Person {
    string name, email;
    ulong age;
    auto withName(string name) { this.name=name; return this; }
auto withEmail(string email) { this.email=email; return this; }
    auto withAge(ulong age) { this.age=age; return this; }
}

void main() {
    auto p = (new Person).withName("Tom")
                         .withEmail("joel...@gmail.com")
                         .withAge(44);
    writeln(p);
}
```

If you convert it to a class, add an `static opCall` for initialization,
and a toString() method, it's even nicer:
```d
module app;

import std;

class Person {
    private string name, email;
    private ulong age;

    auto withName(string name) { this.name=name; return this; }
auto withEmail(string email) { this.email=email; return this; }
    auto withAge(ulong age) { this.age=age; return this; }

    static Person opCall() => new Person();

    override string toString() {
return "Person{ name: "~name~", age: "~age.to!string~", email: "~email~" }";
    }
}

void main() {
    auto p = Person()
                 .withName("Tom")
                 .withEmail("joel...@gmail.com")
                 .withAge(44);

    writeln(p);
}
```
It's common OOP style in some frameworks.

Reply via email to