--[[ debug.getupvalue(f, up)
返回函数("Closure")"f"的第"up"个"upvalue"的名字和值。
Lua按照"upvalues"在匿名函数中出现的顺序对其编号。如果指定的"up"索引越界,则返回"nil"。
以‘(‘开头的变量名表示没有名字的变量(比如是循环控制用到的控制变量,或是去除了调试信息的代码块)。
debug.setupvalue(f, up, value)
与"debug.setupvalue()"的功能相对,将函数"f"("Closure")的第"up"个"upvalue"的值设置为"value"。
函数返回被设置的"upvalue"的名字。如果指定的"up"索引越界,则返回"nil"。
注:获取与设置"upvalue"与"Closure"是否被调用(是否在调用栈上)无关。]]
-- "Closure"。
function newCounter ()
local n = 0
local k = 0
return function ()
k = n
n = n + 1
return n
end
end
counter = newCounter()
print(counter())
print(counter())
-- 此时"k"是1ÿ