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

Reply via email to