local _g = _G
exports = {}
setmetatable(exports,{
__newindex = function(_, key, value)
rawset(_g, key, value)
end,
__index = function(_, key)
return rawget(__g, key)
end
})
setmetatable(__g, {
__newindex = function(_, name, value)
print("error", 0)
end
})
exports.x = 18
print(x)
- 元表
在给表a赋值, a[key] = value, 会调用__newindex方法。
查询表a时候, 通过 a[key] 获取value,则调用 __index方法。
通过重写以上两个方法改变G表 查询及赋值 方式, 从而改变全局变量的赋值方式,改用exports作为新表获取值。
- rawset
rawset 是忽略元表的赋值方式(__newindex),采用简单的直接赋值, rawset(table, key, value)相当于 table[key] = value
- rawget
同理,忽略元表的取值,直接返回value
- 以上赋值使用方式
在全局中,随便一个地方,采取exports.key = value,即可赋值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!