我正在尝试理解索引如何应用于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相关联的正确索引的逻辑方法。
答案 0 :(得分:1)
Lua中的每个块都以_ENV
作为其第一个upvalue开始。