lua编程 全局变量 环境 模块

本文介绍了Lua中全局变量的实际存储位置,强调了环境在全局变量访问中的作用。通过示例展示了setfenv函数如何改变全局环境,并解释了如何保持对旧全局变量的访问。同时,文章还探讨了require函数在导入模块时的作用,以及如何通过返回值来确定模块在全局表中的表示。
摘要由CSDN通过智能技术生成

1.全局变量与环境

lua中真正存储全局变量的地方不是在_G里面,而是在setfenv(i,table)的table中,所有当前的全局变量都在这里面找,只不过在程序开始时lua会默认先设置一个变量

_G=这个里面的table而已。所以在新设置环境后,如果还想找到之前的全局变量,通常需要附加上为新的table设置元表{_index=_G}

下面的几个例子:

a=1
print(a)
print(_G.a)
--正常情况,输出1,1


a=1
setfenv(1,{})
print(a)
print(_G.a)
--这时会出错说找不到print,因为当前的全局变量表示空的,啥也找不到的

a=1
setfenv(1,{_G=_G})
_G.print(_G.a)

print(a)

--这时_G.print(_G.a)可以正常吗,因为可以在新的table中找到一个叫_G的表,这个_G有之前的奈尔全局变量,但是下面的print(a)则找不到print,因为当前的table{_G=_G}没有一个叫print的东西


local mt={__index=_G}
local t={}
setmetatable(t,mt)
setfenv(1,t)
print(a)
print(_G.a)

--这是正确输出,因为新的全局表采用之前的表做找不到时的

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值