"fold": a replacement for "reduce"
Meta
jared771 at gmail.com
Thu Mar 27 11:04:13 PDT 2014
On Thursday, 27 March 2014 at 17:30:58 UTC, Simen Kjærås wrote:
> Ah, true. Call it an enhancement request, then. Wanting to
> alias a function literal like that is so common the language
> should support it.
>
> --
> Simen
It's a bit unintuitive as to what works and what doesn't
(although it makes sense for the most part).
//No good
alias fun = a => a + 1;
alias fun = (int a) => a + 1;
//Ok
alias fun = unaryFun!(a => a + 1);
alias fun = unaryFun!((int a) => a + 1);
//Doesn't work
enum fun = a => a + 1;
enum fun = unaryFun!(a => a + 1);
//Works
enum fun = (int a) => a + 1;
enum fun = unaryFun!((int a) => a + 1);
But the fun is just beginning. Now we can mix in template aliases
and enums.
//Chokes
alias fun() = a => a + 1;
alias fun() = (a => a + 1);
alias fun() = (int a) => a + 1;
alias fun(T) = a => a + 1;
alias fun(T) = (a => a + 1);
alias fun(T) = (int a) => a + 1;
//Fine
alias fun() = unaryFun!(a => a + 1);
//Compiles but fails when fun is called
alias fun() = unaryFun!((int a) => a + 1);
fun(1); //undefined reference to
`_D4f2924mainFZv8__T3funZ9__lambda2FNaNbNfiZi'
enum fun() = unaryFun!(a => a + 1);
fun(1); //cannot infer type from template template __lambda2
enum fun() = unaryFun!((int a) => a + 1);
fun(1); //cannot deduce function from argument types !()(int)
enum fun() = a => a + 1;
fun(1); //type void is inferred from initializer a => a + 1
enum fun() = (int a) => a + 1;
fun(1); //cannot deduce function from argument types !()(int)
So there you have it.
More information about the Digitalmars-d
mailing list