On Wednesday, 28 February 2018 at 17:47:22 UTC, Robert M. Münch
wrote:
Hi, I'm lost reading some code:
A a;
auto do(alias f, A)(auto ref A _a){
alias fun = unaryFun!f;
return ...
...
}
How is this alias stuff working? I mean what's the type of f?
Is it an anonymous function which then gets checked to be
unary? How is it recognized in the code using the function
template?
This function can be called with code like this:
a.do((myType) {...myCode...});
do(a, (myType) {...myCode...});
What's wondering me here is that the template function only has
one paraemter (_a) but I somehow can get my myCode into it. But
the code looks like a parameter to me. So why isn't it like:
auto do(alias f, A)(auto ref A _a, ??? myCode){...
I'm a bit confused.
Testing this with:
auto foo(alias f, A)(auto ref A a) { return f(a); }
I can call foo either like this:
foo!(x => x + x)(1);
or
1.foo!(x => x + x);
but these will give errors
foo(1, x => x + x); //Error
1.foo(x => x + x); // Error
I don't see how you can get that kind of behavior...