如何在upvalue + lua

时间:2015-08-29 06:54:03

标签: lua

我正在尝试理解索引如何应用于upvalue但是无法得到索引,因为这导致我在这里提出这个问题。

function newCounter ()
  local t = 10
  local n = 0
  local k = 0

  return function ()
    l = t
    k = n
    n = n + 1
    return n
    end
end

counter = newCounter()
counter()
counter()


print("<==============>")
local i = 1

repeat
  name, val = debug.getupvalue(counter, i)
  if name then
    print ("index", i, name, "=", val)
    if (name == "n") then
      debug.setupvalue(counter,2,10)
    end
    i = i + 1
  end -- if
until not name

当我运行这个时,我得到以下o / p

index   1   _ENV    =   table: 0x7f8203c03ea0
index   2   t   =   10
index   3   k   =   1
index   4   n   =   2

注意:我假设o / p是(基于它们初始化的顺序)

index   1   t   =   10
index   2   k   =   1
index   3   n   =   2
index   4   _ENV    =   table: 0x7f8203c03ea0

可以向我提供一个信息,说明找到与给定upvalue相关联的正确索引的逻辑方法。

1 个答案:

答案 0 :(得分:1)

Lua中的每个块都以_ENV作为其第一个upvalue开始。