缺氧 wiki 编辑团队提示:注册账号并登录后体验更佳,且可通过参数设置定制优化您的浏览体验!

该站点为镜像站点,如果你想帮助这个由玩家志愿编辑的 wiki 站点,请前往原站点参与编辑,
同时欢迎加入编辑讨论群 851803695 与其他编辑者一起参与建设!

全站通知:

模块:Dev/No globals

来自缺氧WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

此模块的文档可以在模块:Dev/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)