【发布时间】:2015-08-29 18:29:21
【问题描述】:
我正在尝试了解如何在 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
任何人都可以向我提供有关找到与给定上值关联的正确索引的逻辑方法的信息。
【问题讨论】:
-
上值的顺序取决于实现。您使用的方法(使用
debug.getupvalue循环)是获得正确索引的唯一方法。
标签: lua