第一版是针对 Lua 5.0 编写的。虽然在很大程度上仍然适用于后续版本,但存在一些差异。
第四版针对 Lua 5.3,可在 Amazon 和其他书店购买。
购买本书,您还可以帮助 支持 Lua 项目。
![]() |
用 Lua 编程 | ![]() |
| 第三部分。标准库 第 23 章。调试库 |
您可以通过调用 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 尚未进入作用域。(请记住,局部变量仅在其初始化代码之后才可见。)
您还可以使用 debug.setlocal 更改局部变量的值。它的前两个参数是堆栈级别和变量索引,如在 getlocal 中一样。它的第三个参数是该变量的新值。它返回变量名称,如果变量索引超出作用域,则返回 nil。
| 版权所有 © 2003–2004 Roberto Ierusalimschy。保留所有权利。 | ![]() |