1 alias test1 = naryFun!"a"; 2 assert(test1(1) == 1); 3 assert(test1(test1(2.0)) == 2.0); 4 static assert(is(typeof({test1(1, 1);}))); // OK 5 // 最初の引数を返す関数だから。 6 // 2つ目の引数は使用されない。 7 8 static assert(!is(typeof({test1();}))); // NG 9 10 11 alias test1_1 = naryFun!("a", 1); // 引数の数を1つとする 12 assert(test1_1(1) == 1); 13 assert(test1_1(test1(2.0)) == 2.0); 14 static assert(!is(typeof({test1_1(1, 1);}))); // NG 15 16 17 alias test1_2 = naryFun!("a", 2); // 引数の数を2つとする 18 assert(test1_2(1, 1) == 1); 19 assert(test1_2(test1_2(2.0, 2), 1) == 2.0); 20 static assert(!is(typeof({test1_2(1);}))); // NG 21 22 23 alias test2 = naryFun!"b"; 24 assert(test2(1, 2) == 2); 25 assert(test2(test2(1, "2"), test2(3.0, '4')) == '4'); 26 static assert(!is(typeof({test2();}))); 27 static assert(!is(typeof({test2(1);}))); 28 static assert(is(typeof({test2(1, 1, 2.2);}))); 29 30 31 // アルファベット 32 alias test3 = naryFun!"a + b + c"; 33 assert(test3(1, 2, 3) == 6); 34 35 import std.bigint; 36 assert(test3(BigInt(1), 2, 3) == BigInt(6)); 37 38 39 // 数字 40 alias test4 = naryFun!"_0 + _1 + _2 + _3"; 41 assert(test4(1, 2, 3, 4) == 10);
このテンプレートは、$(M std.functional.unaryFun)や$(M std.functional.binaryFun)を一般化し、 N個の引数を取れるようにしたものです。 $(M unaryFun)や$(M binaryFun)のように文字列に対して作用する場合は、その文字列で表される関数となります。 対して、文字列以外を$(M naryFun)に適用した場合には、その対象へのaliasとなります。
文字列による形式には、現在のところアルファベット及び数字に対応しています。