嵌套lambda语法

本文关键字:语法 lambda 嵌套 | 更新日期: 2023-09-27 18:12:47

我注意到以下代码无法编译:

Func<int> a = ((j) => (() => 3 * j))(1);

在我看来这是一个有效的语句,下面的等价(?)语句在python中是有效的:

print (lambda x: lambda: 3 * x)(1)()

这仅仅是匿名函数在运行时处理方式的结果吗?

嵌套lambda语法

这是c#中可能的但不是pretty -它需要显式强制转换和大量括号:

Func<int> a = ((Func<int, Func<int>>)(j => () => 3 * j))(1);
同样

Func<int, Func<int>> x = j => () => 3 * j;
Func<int> a = x(1);

我认为这里的问题是c#通常不能推断lambda的类型——它只能检查lambda是否匹配它所赋值的类型转换、变量、参数等。在您的版本中,外部lambda (x)没有指定类型