この初版はLua 5.0用に書かれました。概ね後のバージョンでも関連しますが、いくつかの相違点があります。
第4版はLua 5.3を対象としており、Amazonや他の書店で入手できます。
本を購入することでLuaプロジェクトをサポートすることにもなります。


23.1.1 – ローカル変数にアクセスする

debugライブラリのgetlocalを呼び出すと、実行中の関数のローカル変数にアクセスできます。これは2つのパラメータを持ちます。照会中の関数のスタックレベルと変数のインデックスです。名前と変数の現在の値の2つの値を返します。変数インデックスがアクティブな変数の数より大きい場合、getlocalnilを返します。スタックレベルが無効な場合、エラーが発生します。(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を使用してローカル変数の値を変更することもできます。最初の2つのパラメータはgetlocalと同じようにスタックレベルと変数インデックスです。3番目のパラメータはその変数の新しい値です。変数名、または変数インデックスがスコープ外である場合はnilを返します。