ここでは、Lua (5.1) で debug.getlocal 関数を使用してローカル変数をテーブルに挿入する方法を見てきました。
function locals()
local variables = {}
local idx = 1
while true do
local ln, lv = debug.getlocal(2, idx)
if ln ~= nil then
variables[ln] = lv
else
break
end
idx = 1 + idx
end
return variables
end
ただし、作成したテーブルを返してそのエントリにアクセスしようとすると、機能しません。
function test1()
local v = 'I am a local!'
return locals()
end
print(test1().v) -- nil
いくつかの試行錯誤の後、テーブルを変数にバインドしてから返すか、単に括弧を追加するだけで動作が修正されることに気付きました。
function test2()
local v = 'I am a local!'
return (locals())
end
print(test2().v) -- 'I am a local!'
これは私を非常に混乱させます。これらの 2 つのプログラムが異なるのはなぜですか? 私は何を理解していませんか?locals() が末尾呼び出し位置にあるという事実は、何か違いがありますか?