2

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

4

1 回答 1

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);
}
于 2011-04-25T15:19:10.217 回答