【lua全局变量_G】
来源:互联网 发布:梅西最新数据 编辑:程序博客网 时间:2024/04/28 18:16
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)
--这是正确输出,因为新的全局表采用之前的表做找不到时的索引,原先的表里面存在print 、_G、 a这些东西
setfenv的第一个参数可以是当前的堆栈层次,如1代表当前代码块,2表调用当前的上一层,也可以是具体的那个函数名,表示在那个函数里。
每个新创建的函数都将继承创建它的那个函数的全局环境
0 0
- 【lua全局变量_G】
- Lua集锦二 全局变量_G
- lua _G
- Lua _G
- 深入理解Lua的全局变量_G以及源码实现
- 深入理解Lua的全局变量_G以及源码实现
- cocos2d-x + Lua初始环境下的_G全局变量内容
- cocos2d-x + Lua初始环境下的_G全局变量内容
- 深入理解Lua的全局变量_G以及源码实现
- 深入理解Lua的全局变量_G以及源码实现
- 深入理解Lua的全局变量_G以及源码实现
- Discuz! 全局变量 $_G
- discuz $_G 全局变量
- Discuz! 全局变量 $_G
- Discuz! 全局变量 $_G 详解
- Discuz! 全局变量 $_G 详解
- Discuz! 全局变量 $_G
- lua _G 实现
- windows下检测文件改变
- iOS_传感器的使用
- 第13讲- Android之消息提示Notification
- 通过浏览器的User-Agent实现手机版和电脑版的自动识别切换
- 监听系统wifi、蓝牙变化广播
- 【lua全局变量_G】
- 黑马Java——面向对象
- cocos2d-x+lua代码热加载(Hot Swap)的研究
- 容斥原理求1~r中有多少个数与n互素
- 多文件写出
- 中国有句俗语叫“三天打鱼两天晒网”。 某人从1990年1月1日起开始“三天打鱼两天晒网”, 问这个人在以后的某一天中是“打鱼”还是“晒网”?
- HttpClient使用详解
- 思维导图软件
- cocos2d-x (音效音乐)SimpleAudioEngine