据我了解,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 没有语句级匿名类。上述解决方案取决于是否存在匿名类。
据我了解,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 没有语句级匿名类。上述解决方案取决于是否存在匿名类。
我对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);
}