On Tuesday, 28 June 2016 at 15:03:01 UTC, Steven Schveighoffer
wrote:
On 6/28/16 10:07 AM, Ola Fosheim Grøstad wrote:
On Tuesday, 28 June 2016 at 13:50:42 UTC, Steven Schveighoffer
wrote:
On 6/28/16 7:35 AM, Ola Fosheim Grøstad wrote:
alias func = (int i) => i*i;
?
Is that valid in the compiler, or are you proposing it? I
haven't used
or seen such a thing.
It does work:
----
import std.stdio;
alias func1 = (int i) => i*i;
alias func2 = function int (int i){ return i+i;};
void main(){
writeln(func1(3), " ", func2(4), " ", func1);
}
----
https://dpaste.dzfl.pl/5d35ab068c2b
That's pretty cool. Unfortunately, it's still a
delegate/function.
I was thinking to define actual functions this way.
-Steve
It was added with DMD 2.070
(http://dlang.org/changelog/2.070.0.html#alias-funclit) and helps
unify normal aliases with alias template parameters.
However similar to member delegates, it does not have access to
the enclosing aggregate's members.
struct S
{
int x;
// Doesn't work:
auto inc = () => x++;
// Neither does this:
alias add = (amount) => x += x = cast(int)(x + amount);
void memberFun() // But this is ok:
{
alias add = (amount) => x = cast(int)(x + amount);
add('1');
add(2UL);
add(3.5f);
add(4.0);
}
}