第一版是為 Lua 5.0 編寫的。儘管對後續版本仍然適用,但仍有一些差異。
第四版針對 Lua 5.3,可在 Amazon 和其他書店購買。
購買本書,您還可以幫助 支持 Lua 項目


23.1.1 – 存取局部變數

您可以透過呼叫 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 已超出範圍,而 namevalue 尚未在範圍內。(請記住,局部變數僅在初始化程式碼之後才可見。)

您也可以使用 debug.setlocal 來變更局部變數的值。它的前兩個參數是堆疊層級和變數索引,就像 getlocal 一樣。它的第三個參數是該變數的新值。它會傳回變數名稱,或如果變數索引超出範圍,則傳回 nil