据我了解,Scala 中的 Function 类型会编译为 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
接口(interface)的类,其 apply()
函数如下所示:
public sealed override bool apply(int x$1)
{
return (x$1 >= 2);
}
关于.net - Scala 闭包在 Scala.NET 中是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5779279/