lua5.2 带你理解_ENV和_G

Lua5.2引入了_ENV来管理全局变量,与5.1中的_G有所不同。_ENV不再是全局变量,而是作为upvalue存在。在5.2中,全局变量赋值操作实际是在_ENV表中进行。此外,_ENV['_G']指向_ENV自身以兼容5.1。通过覆盖_ENV可以为函数定义设置新的环境。lua的C支持中,lua_setglobal/lua_getglobal操作的是注册表中的全局变量表,不同于lua代码中的_ENV访问。lua_load返回的函数默认有一个_ENV的upvalue,指向LUA_RIDX_GLOBALS的全局表,确保了_ENV['_G']的正确指向。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

5.1之前, 全局变量存储在_G这个table中, 这样的操作:
a = 1 
相当于:
_G['a'] = 1

但在5.2之后, 引入了_ENV叫做环境,与_G全局变量表产生了一些混淆,需要从原理上做一个理解。
在5.2中, 
操作a = 1
相当于
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值