この初版は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. | ![]() |