×
Create a new article
Write your page title here:
We currently have 179 articles on NBITTRPG Wiki. Type your article name above or click on one of the titles below and start writing!



NBITTRPG Wiki

Documentation for this module may be created at Module:No globals/doc

--  <pre>
--------------------------------------------------------------------------------
--- No globals prevents nil global variables from being written to or read.
--  This module greatly reduces the chance of errors from overriding globals.
--  
--  To use the module, add the following code below your module table
--  definition:
--  
--  {{#tag:pre|require('Module:No globals')}}&#010;
--  
--  The @{require} function sets the `arg` global in the package library when
--  loading a module - see the [source code](https://git.io/JfKu8) in Scribunto
--  core. To ensure Scribunto can load modules, the `arg` global is whitelisted.
--  
--  @script             getmetatable(_G)
--  @alias              mt
--  @release            stable
--  @note               This module has been adapted as a library in 
--                      [[mw:gerrit:q/834623|MediaWiki core]], called as
--                      `require('strict')`.
--  @author             [[wikipedia:User:Jackmcbarn|Jackmcbarn]] (Wikipedia)
--  @author             [[User:Dessamator|Dessamator]]
--  @attribution        [[wikipedia:Module:No globals|Wikipedia]]
local mt = getmetatable(_G) or {}

--- Read access restriction on @{_G} global table.
--  @function           mt.__index
--  @param              {table} t Global table - @{_G}.
--  @param              k Indexed key.
--  @error[opt,28]      {string} 'tried to read nil global $k'
function mt.__index(t, k)
    if k ~= 'arg' then
        error('Tried to read nil global ' .. tostring(k), 2)
    end
    return nil
end

--- Write access restriction on @{_G} global table.
--  @function           mt.__newindex
--  @param              {table} t Global table - @{_G}.
--  @param              k Indexed key.
--  @param              v Value to be assigned.
--  @error[opt,42]      {string} 'tried to write global $k'
function mt.__newindex(t, k, v)
    if k ~= 'arg' then
        error('Tried to write global ' .. tostring(k), 2)
    end
    rawset(t, k, v)
end

setmetatable(_G, mt)

Recent changes

  • Zaptrap • Friday at 22:20
  • Zaptrap • Friday at 22:18
  • Zaptrap • Friday at 22:15
  • Ember • Friday at 22:03
  • AndrewFBR • Friday at 00:24
  • AndrewFBR • Friday at 00:24
  • AndrewFBR • Friday at 00:24
  • AndrewFBR • Friday at 00:24