簡単なluaグローバル変数モニタリング

1061 ワード

ゲーム開発ではluaがよく使われていますが、これは柔軟で使いやすいですが、踏みやすい穴もあります.グローバル変数は一つです.
luaの中で勝手にどのように1つのlocalを少なく書くことができるため、簡単に1つのグローバル変数を創造することができて、このような定義の間違いのグローバル変数の問題は発生しやすくて、特に1つのコードの量の比較的に大きいプロジェクトの中で、1人1つ、とても安定しています.
では、このような問題をできるだけ探して解決するために、急に頭が熱くなって、一波考えました.Gもそのような1つの時計で、また__がありますnewindexというものは、定義呼び出しが付いているかもしれません.newindexの時に記録して、後で調べることができます.それでこうしてgetinfo()、落ち着いた!そうみたいだdebug.getinfo()の情報を印刷して、問題ありません.
そこでこの簡単なアイデアから生まれたコードは以下の通りです.縁のある方はもっと完璧な解決策をあげましょう.
--      
local WriteToFile = function(fileName, content)
    local f = assert(io.open(fileName,'a'))
    f:write(content)
    f:close()
end 

--         
local logPath = "E:\\gamelog.txt"

--               ,    
os.remove(logPath)

setmetatable(_G, {__newindex = function(t,k,v)
		local info = debug.getinfo(2, "lS")
		WriteToFile(logPath, "k:" .. tostring(k) .. " == type:" .. type(v) .. " == short_src:" .. info.short_src .. " == currentline:" .. info.currentline .. "
\r" ) rawset(t, k, v) end} )