Lua - 环境与模块


Lua - 环境与模块 (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(...

Lua - 环境与模块 (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={} setmeta...

发布者: 作者: 转发
评论区 (0)
U