第一版是為 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。保留所有權利。 | ![]() |