两个闭包如何共享一个upvalue?它是如何工作的?
function print_env()
print(_ENV) --_ENV is an upvalue
end
function foo()
_ENV = { print = print, print_env = print_env} --redefine the _ENV upvalue
print(_ENV) --prints: 0094CF40
print_env() --prints: 0094CF40
end
当我从print_env()
拨打foo()
时,它会打印_ENV
中定义的foo()
,但由于它们是不同的功能,它们的闭包不应该有不同的upvalues吗?因此,当一个函数修改其upvalue时,另一个函数保持不变。或_ENV
是一个特殊的升值?
由于
答案 0 :(得分:1)
Upvalues是外部局部变量。当两个函数使用相同的外部局部变量时,它们可以共享up值。这是由词汇范围决定的。此外,每个块都会看到一个名为_ENV
的外部局部变量,用于解析全局名称。