Aliasメソッド

最近追加された(ている)マクロのご紹介。

using System;
using Nemerle;

module M {
    // 引数x,yを逆に渡した関数に別名GreaterThanを付ける
    [Alias (GreaterThan(y,x))]
    public static LessThan (x : int, y : int) : bool {
        x < y
    }

    public static Main () : void {
        def x = 10;
        def y = 20;

        when (LessThan (x, y))
            Console.WriteLine ($"$x < $y");

        // これは偽
        when (GreaterThan (x, y))
            Console.WriteLine ($"$x > $y");

        when (GreaterThan (y, x))
            Console.WriteLine ($"$y > $x");
    }
}

/* 結果
10 < 20
20 > 10
 */

見ての通り、LessThanメソッドの引数を逆にしたGreaterThanメソッドを自動生成しています。別名を付けるときは引数の順番を変える、もしくは、引数の数を変える(1つ減らす)ことが出来るようです。引数を減らした場合は、第一引数にthisが渡され、クラスメソッドがインスタンスメソッドに変更されます。