据我了解,Scala中的函数类型编译为 FunctionN 的实例。例如,这个例子
List(1,2,3).filter(_ >= 2)
装置
List(1,2,3).filter(new Function1[Int,Bool]{def apply(_$1:Int) = _$1 >= 2;})
如何在Scala.NET中实现?据我了解,.NET没有语句级匿名类。以上解决方案取决于是否存在匿名类。
答案 0 :(得分:4)
我对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);
}