gpt4 book ai didi

c# - 在 C# 中闭包不是不可变的有什么充分的理由吗?

转载 作者:太空狗 更新时间:2023-10-29 20:58:03 24 4
gpt4 key购买 nike

我一直在脑海中反复思考这个问题,但我似乎想不出一个充分的理由说明 C# 闭包是可变的。如果您不知道到底发生了什么,这似乎是获得一些意想不到的后果的好方法。

也许知识渊博的人可以阐明为什么 C# 的设计者允许在闭包中更改状态?

例子:

var foo = "hello";
Action bar = () => Console.WriteLine(foo);
bar();
foo = "goodbye";
bar();

这将为第一次调用打印“hello”,但第二次调用时外部状态发生变化,打印“goodbye”。闭包的状态已更新以反射(reflect)对局部变量的更改。

最佳答案

C# 和 JavaScript,以及 O'Caml 和 Haskell 以及许多其他语言都具有所谓的词法闭包。这意味着内部函数可以访问封闭函数中局部变量的名称,而不仅仅是的副本。当然,在具有不可变符号的语言中,例如 O'Caml 或 Haskell,关闭名称与关闭值是相同的,因此两种类型的闭包之间的差异消失了;然而,这些语言像 C# 和 JavaScript 一样具有词法闭包。

关于c# - 在 C# 中闭包不是不可变的有什么充分的理由吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/483944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com