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 @ 2021-12-28 20:06  小乐虎  阅读(475)  评论(0)    收藏  举报