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
上述测试代码中,函数prri引用了全局变量c,此时获取到 prri的upvalue中的_ENV,访问 _ENV._G.c 即可访问到全局变量c,另外也可以直接用 _ENV.c 访问到。
浙公网安备 33010602011771号