gpt4 book ai didi

language-agnostic - 关闭值与上下文

转载 作者:行者123 更新时间:2023-12-01 10:07:44 27 4
gpt4 key购买 nike

我正在考虑闭包的各种实现,并且想知道不同样式的优点。似乎有两种选择,关闭执行上下文或值。例如,在上下文中我们有:

a = 1
def f():
return a
f() # returns 1
a = 2
f() # returns 2

或者,我们可以关闭值并具有:

a = 1
def f():
return a
f() # returns 1
a = 2
f() # returns 1

是否有实现第二种语言的语言?有优势还是劣势?

最佳答案

我认为在这种情况下,这不是上下文与值的问题,而是您是将变量作为引用单元格还是作为变量包含的值来关闭。

如果您真正指的是上下文,那么您指的是动态范围与词法范围。参见 this用于深入比较的维基百科文章。

大多数语言都实现了词法作用域(或尝试实现)。一些语言确实实现了动态作用域:特别是较旧的 Lisp,如用于 emacs 的 ELisp。大多数具有闭包的语言(例如,Scheme、Haskell、ML 等)都会关闭词法范围内的值。动态范围通常被认为是一个坏主意,因为它更难推理(它是“远距离的幽灵般的 Action ”)。

请注意,即使在词法范围的语言中,如果您关闭引用单元格,您也可以获得与第一个示例类似的行为。这就是为什么 Scheme 和 JavaScript 闭包表现得像它们一样(因为变量是引用单元格)。

关于language-agnostic - 关闭值与上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8793309/

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