什么是共享价值?

时间:2013-07-26 00:33:30

标签: lua upvalue

两个闭包如何共享一个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是一个特殊的升值?

由于

1 个答案:

答案 0 :(得分:1)

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