Modul:Log globals
This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
Ushbu modul nil globallarni topadi va ular o'qilgan/yozilgan joy bilan birga lua jurnaliga qo'shadi. Bu modul Module:No globals dan farq qiladi, chunki siz birinchi muammoli global oʻzgaruvchi uchun xatolikka yoʻl qoʻyish oʻrniga oʻqilayotgan/yozilayotgan barcha nol global oʻzgaruvchilarni koʻrishingiz mumkin. arg o'zgaruvchisi bundan mustasno.
local mt = getmetatable(_G) or {}
local function print(val)
if type(val) == "table" then
local printout = {}
local i = 1
for k, v in pairs(val) do
table.insert(printout, ("[%s] = %s"):format(tostring(k), tostring(v)) )
i = i + 1
if i > 5 then
table.insert(printout, "...")
break
end
end
printout = { table.concat(printout, ", ") }
table.insert(printout, 1, "{")
table.insert(printout, "}")
return table.concat(printout)
elseif type(val) == "string" then
return '"' .. val .. '"'
else
return tostring(val)
end
end
mt.__newindex = function (self, key, value)
if key ~= "arg" then
mw.log("Global variable " .. print(key) .. " was set to "
.. print(value) .. " somewhere:",
debug.traceback("", 2))
end
return rawset(self, key, value)
end
mt.__index = function (self, key)
if key ~= "arg" then
mw.log("Nil global variable " .. print(key) .. " was read somewhere:",
debug.traceback("", 2))
end
return rawget(self, key)
end
setmetatable(_G, mt)