访问局部变量
通过函数 debug.getlocal 来检查任意活跃函数的局部变量。该函数有两个参数,一个是要查询的栈层次,另一个则是变量的索引。该函数返回两个值,变量名和变量的当前值。如果变量索引大于活跃变量的数量,那么函数 getlocal 返回 nil。如果栈层次无效,则会抛出异常(可以使用函数 debug.getinfo 来检查栈层次是否有效。)
Lua 语言按局部变量在函数中出现的顺序对它们进行编号,但编号只限于函数当前作用域中活跃的变量。
function foo (a, b)
local x
do local c = a - b end
local a = 1
while true do
local name, value = debug.getlocal(1, a)
if not name then break end
print(name, value)
a = a + 1
end
end
调用 **foo(10, 20) 将会输出:
a 10
b 20
x nil
a 4
索引为1的变量为 a (第一个参数), 索引为2的变量是 b, 索引为3的变量是 x, 索引为4的变量是内层的 a。在函数 getlocal被调用的时候, c 已经离开了作用域,而 name 和 value 还未出现于作用域内,
从 Lua 5.2 开始, 值为负的索引获取可变长参数的额外参数。 还可以通过函数 debug.setlocal 来改变局部变量的值,该函数的前两个参数与 getlocal 相同,分别是栈层次和变量索引,而第三个参数则是该局部变量的新值。该函数的返回值是变量名,如果变量索引超出了范围则返回 nil。
博客介绍了Lua语言中访问和修改局部变量的方法。可通过函数debug.getlocal检查任意活跃函数的局部变量,它有两个参数,返回变量名和当前值。Lua按局部变量在函数中出现顺序编号。从Lua 5.2开始,负索引可获取可变长参数。还能通过debug.setlocal改变局部变量值。
&spm=1001.2101.3001.5002&articleId=88652060&d=1&t=3&u=77684ec4dc204c419103ec6702cf3fbd)
8075

被折叠的 条评论
为什么被折叠?



