4

ここでは、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() が末尾呼び出し位置にあるという事実は、何か違いがありますか?

4

1 に答える 1