Scalaについては何も知りませんが、C#クロージャと同じ方法で実装すべきではない理由、つまり次のコードがわかりません。
new List<int>{1,2,3}.Where(i => i >= 2)
このコードは、現在のクラスに新しい関数を作成することによって実装されます。本当にクロージャーを作成した場合:
int max = 2;
var result = new List<int> { 1, 2, 3 }.Where(i => i >= max);
max
これは、無名関数とともに変数を含む新しいクラスを作成することで実装されます。
編集:
Scala.Netを使用してコードをコンパイルしようとしましたが、Reflectorでコンパイルされたコードを見ると、次のようになります。
int[] numArray1 = new int[] { 1, 2, 3 };
List$.MODULE$.apply(new BoxedIntArray(numArray1)).filter(new $anonfun$1());
インターフェイス$anonfun$1
を実装するクラスはどこにあり、その関数は次のようになります。Function1
apply()
public sealed override bool apply(int x$1)
{
return (x$1 >= 2);
}