【发布时间】:2009-01-01 12:23:25
【问题描述】:
我发现以下内容很奇怪。再说一次,我主要在动态语言中使用闭包,这不应该被同一个“错误”怀疑。以下使编译器不高兴:
VoidFunction t = delegate { int i = 0; };
int i = 1;
上面写着:
名为“i”的局部变量不能 在此范围内声明,因为它 会给'i'赋予不同的含义, 已在“孩子”中使用 表示其他东西的范围
所以这基本上意味着在委托中声明的变量将具有在其中声明的函数的范围。不完全是我所期望的。我什至没有尝试调用该函数。至少 Common Lisp 有一个特性,你说一个变量应该有一个动态名称,如果你真的希望它是本地的。这在创建不泄漏的宏时尤其重要,但类似的东西在这里也很有帮助。
所以我想知道其他人如何解决这个问题?
为了澄清,我正在寻找一种解决方案,其中我在委托中声明的变量不会干扰在委托之后声明的变量。而且我希望仍然能够捕获在委托之前声明的变量。
【问题讨论】:
标签: c# functional-programming delegates lambda scope