ジェネリックパラメータの明示的指定
Nemerleには型推論があるため、ジェネリック型を明示的に指定する必要がありませんが、実は明示的に指定する方法もありませんでした。最近やっと可能になったのですが、文法的にちょっとクセがあります。
using Nemerle.IO; class A [X] { public mutable a : X; public class B [Y] { } } def a1 = A (); // 型推論でジェネリックパラメータXはintとなる a1.a = 10; printf ("%s\n", a1.GetType ().ToString ()); // 型推論を使わず明示的にジェネリックパラメータを指定する // クラス名と型指定の間に'.'があることに注意 // '.'が無いと[]はインデクサとして扱われてしまう def a2 = A.[string] (); printf ("%s\n", a2.GetType ().ToString ()); // ネストクラスの例 def b1 = A.[int].B.[string] (); printf ("%s\n", b1.GetType ().ToString ()); // このようにも書ける def b2 = A.B.[int, string] (); printf ("%s\n", b2.GetType ().ToString ()); /* 結果 A`1[System.Int32] A`1[System.String] A`1+B`1[System.Int32,System.String] A`1+B`1[System.Int32,System.String] */
アンケートでは他のアイディアもありましたが、結局、これがシンプルなので採用された次第です。(僕もコレに投票した)