2

两个闭包如何共享一个上值?它是如何工作的?

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定义的 in foo(),但是由于它们是不同的函数,它们的闭包不应该有不同的上值吗?因此,当一个函数修改其上值时,另一个保持不变。还是_ENV特殊的升值?

谢谢

4

1 回答 1

1

上值是外部局部变量。当两个函数使用相同的外部局部变量时,它们可以共享上值。这是由词法作用域决定的。此外,每个块都会看到一个名为 的外部局部变量_ENV,用于解析全局名称。

于 2013-07-26T11:13:05.690 回答