この初版はLua 5.0用に書かれました。概ね後のバージョンでも関連しますが、いくつかの相違点があります。
第4版はLua 5.3を対象としており、Amazonや他の書店で入手できます。
本を購入することでLuaプロジェクトをサポートすることにもなります。
![]() |
プログラミングのLua | ![]() |
第III部.標準ライブラリ 第23章.デバッグライブラリ |
debug
ライブラリのgetlocal
を呼び出すと、実行中の関数のローカル変数にアクセスできます。これは2つのパラメータを持ちます。照会中の関数のスタックレベルと変数のインデックスです。名前と変数の現在の値の2つの値を返します。変数インデックスがアクティブな変数の数より大きい場合、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
を使用してローカル変数の値を変更することもできます。最初の2つのパラメータはgetlocal
と同じようにスタックレベルと変数インデックスです。3番目のパラメータはその変数の新しい値です。変数名、または変数インデックスがスコープ外である場合はnilを返します。
Copyright © 2003–2004 Roberto Ierusalimschy. All rights reserved. | ![]() |