我開始使用C++/Lua
代碼庫,這個代碼有點亂,當我在應用程序執行過程中轉儲_G
的內容時,我確信有數百個變量只在某處初始化,但沒有被使用代碼中的其他任何地方。爲了清除這個問題,我想設置一個機制,只要Lua
訪問一個全局變量就會記錄。如何檢測Lua腳本何時訪問全局變量?
這是我如何實現這個想法 - 我通過__index
和__newindex
想設置一個代理_G
,只會通過所有讀寫訪問沿着自身的原_G
的副本。但是這個簡單的腳本不工作,只輸出:
C:\Programs\lua-5.1.5_Win32_bin\lua5.1: error in error handling
GProx =
{
vars = _G
}
setmetatable(GProx, {
__index = function (t, name)
print("Read> " .. name)
return t.vars[name]
end,
__newindex = function (t, name, val)
print("Write> " .. name .. ' = ' .. val)
t.vars[name] = val
end
})
setfenv(0, GProx)
a = 1 --> Expected to print 'Write> a'
print(a) --> Expected to print 'Read> print', 'Read> a', and '1'
這是一個很好的做法還是有更好的方式來做到這一點?
如果這是一個有效的思路,那麼我的代碼段有什麼問題?
謝謝,這完全符合我的需要。重要的部分是在'1'而不是'0'的環境中設置新的環境 - 即使我的原始片段開始按預期工作,當我改變它。 – electroLux