索引如何应用于UpValue+ 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

当我运行它时,我得到了以下输出:

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

注意:我本来以为输出会是下面这样的(基于它们初始化的顺序):

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

请问有人可以提供关于如何找到与给定 upvalue 关联的正确索引的逻辑方式吗?

点赞
用户107090
用户107090

在 Lua 中,每个块都以 _ENV 作为其第一个 upvalue。

2015-08-29 10:29:21