我正在阅读有关闭包的文章,其中他们说:
- “所有的管道都是自动的”
- 编译器“创建了一个包装类”并“扩展了变量的生命周期”
- “您可以放心使用局部变量”
- .NET编译器为您处理所有的管道等。
因此,我基于他们的代码做了一个例子,对我来说,闭包似乎只是类似于常规命名方法的行为,它们也“毫不费力地处理本地变量”,并且“所有的管道都是自动的”。
那么,“包装本地变量”的这个问题解决了什么问题,使得闭包如此特殊/有趣/有用呢?
using System;
namespace TestingLambda2872
{
class Program
{
static void Main(string[] args)
{
Func<int, int> AddToIt = AddToItClosure();
Console.WriteLine("the result is {0}", AddToIt(3)); //returns 30
Console.ReadLine();
}
public static Func<int, int> AddToItClosure()
{
int a = 27;
Func<int, int> func = s => s + a;
return func;
}
}
}
答案
所以这个问题的答案是阅读Jon Skeet关于闭包的文章,Marc指出了这一点。这篇文章不仅展示了C#中lambda表达式的演变过程,还展示了Java如何处理闭包,是这个主题的绝佳阅读材料。