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();