第一版是针对 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。保留所有权利。 |