什么是共享的Upvalues?

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

function print_env()
  print(_ENV) --_ENV 是一个上值
end

function foo()
  _ENV = { print = print, print_env = print_env} --重新定义 _ENV 上值
  print(_ENV) --输出: 0094CF40
  print_env() --输出: 0094CF40
end

当我从 foo() 调用 print_env() 时,它打印出在 foo() 中定义的 _ENV,但是由于它们是不同的函数,它们的闭包不应该拥有不同的上值吗?因此,当一个函数修改它的上值时,另一个函数保持不变。或者 _ENV 是一个特殊的上值吗?

谢谢。

点赞
用户107090
用户107090

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

Upvalues 是外部局部变量。当两个函数使用相同的外部局部变量时,它们可以共享Upvalues。这是由词法作用域决定的。此外,每个块都看到一个名为 `_ENV` 的外部局部变量,它用于解析全局名称。
2013-07-26 11:13:05