lua中全局变量的保存

lua如何保存c的全局变量以及static变量?

  lua使用registry保存c的全局变量以及static,为了防止被lua文件修改,该表只能在c中访问。

  lua文件本身的全局变量如何保存,与c的全局变量不同,lua的全局变量保存在upvalue中的 _ENV表中的_G表,例如:

复制代码
 1 local a = {
 2     ["2122"] = "2-4266705",
 3     ["111"] = "2-9549213",
 4     ["2119"] = "2-6855130",
 5     ["2120"] = "2-6855130",
 6     ["2121"] = "2-4266705",
 7 } 
 8 
 9 c = {
10     a = 1,
11     b = 2
12 }
13 local b = 1
14 local function prri()
15      b = b+ 1
16      c.c =  1
17 end
18 prri()
19 local i = 1
20 while true do
21     local name, value = debug.getupvalue(prri, i)
22     if not name then
23         break
24     end
25     print("=======", name, value)
26     if name == "_ENV" then
27         for _, v in pairs(value._G.c) do
28             print(_, v )
29         end
30     end
31     i = i + 1
32 end
View Code
复制代码

  上述测试代码中,函数prri引用了全局变量c,此时获取到 prri的upvalue中的_ENV,访问 _ENV._G.c 即可访问到全局变量c,另外也可以直接用 _ENV.c 访问到。

posted @   小乐虎  阅读(419)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示