On Friday, 24 July 2015 at 15:01:29 UTC, Adam D. Ruppe wrote:
On Friday, 24 July 2015 at 14:48:30 UTC, Marc Schütz wrote:
But I fail to see the relation to named parameters?

You can make your parameters into a struct or tuple and fill them in with normal assignment. The with(auto) thing will conveniently limit the scope of the temporary argument object and give a bit of syntax sugar for it:

with(auto args = ParameterTypeTuple!foo) {
   argname = cool;
   argname2 = whatever;
   foo(args);
}


.....ironically, given the other thread about statements as expressions where i said 'meh', this is actually a decent case for them too, to get the return value of foo out of that scope while still allowing auto.

But that's a separate issue, the main point here is just that you can use it to prepare the arguments with a bit of sugar.

The with statement is one where I think it would be interesting to make it an expression.

For named parameters (admittedly, I find this one a bit ugly):
foo(with(ParameterTypeTuple!foo) {
    abc = 2,
    def = 3
});

Or just:
auto args = with(ParameterTypeTuple!foo) {
    abc = 2,
    def = 3
};
foo(args);


For initialization:
auto a = with(new FooBar()) {
    name = "Foo",
    bar = 3
};

Or:
with(new Thread(&foo) {
    isDaemon = true
}).start();

Reply via email to