Module:No globals: Difference between revisions
From The Kodiak Republic Wiki
Content added Content deleted
(←Created page with 'local mt = getmetatable(_G) or {} local oldIndex = mt.__index or function() return nil end mt.__index = function(t, k) if k ~= 'name' and k ~= 'arg' then erro...') |
(don't bother saving old __index or __newindex) |
||
Line 1: | Line 1: | ||
local mt = getmetatable(_G) or {} |
local mt = getmetatable(_G) or {} |
||
function mt.__index (t, k) |
|||
mt.__index = function(t, k) |
|||
if k ~= 'name' and k ~= 'arg' then |
if k ~= 'name' and k ~= 'arg' then |
||
error('Tried to read nil global ' .. tostring(k), 2) |
error('Tried to read nil global ' .. tostring(k), 2) |
||
end |
end |
||
return |
return nil |
||
end |
end |
||
local oldNewindex = mt.__newindex or rawset |
|||
function mt.__newindex(t, k, v) |
function mt.__newindex(t, k, v) |
||
if k ~= 'name' and k ~= 'arg' then |
if k ~= 'name' and k ~= 'arg' then |
||
error('Tried to write global ' .. tostring(k), 2) |
error('Tried to write global ' .. tostring(k), 2) |
||
end |
end |
||
rawset(t, k, v) |
|||
end |
end |
||
setmetatable(_G, mt) |
setmetatable(_G, mt) |
Revision as of 20:46, 23 April 2014
This module causes an error if any nil global is read or if any global is written to, with the exception of arg. To use, add require('Module:No globals')
to the top of the module using it. The arg variable is excluded because it is necessary for Scribunto's require function to work properly. (See the Scribunto source code here.)
local mt = getmetatable(_G) or {}
function mt.__index (t, k)
if k ~= 'name' and k ~= 'arg' then
error('Tried to read nil global ' .. tostring(k), 2)
end
return nil
end
function mt.__newindex(t, k, v)
if k ~= 'name' and k ~= 'arg' then
error('Tried to write global ' .. tostring(k), 2)
end
rawset(t, k, v)
end
setmetatable(_G, mt)