Lua极简入门指南:全局变量
技术  /  管理员 发布于 6年前   846
全局环境
Lua 把全局变量放在一个 table _G 中,这个 table 被叫做全局环境(global environment)。打印所有的全局变量名:
复制代码 代码如下:
for n in pairs(_G) do print(n) end
_ENV(Lua 5.2 开始支持)
对于一个 free name(名字没有绑定任何声明)var 实际上会被转换为 _ENV.var(每个 chunk 中都会存在一个名为 _ENV 的变量):
复制代码 代码如下:
v1 = 1
local v2 = 2
print(_ENV.v1) --> 1
print(_ENV.v2) --> nil
function f(v3)
v4 = 4
local v5 = 5
print(_ENV.v3) --> nil
print(_ENV.v4) --> 4
print(_ENV.v5) --> nil
for v6 = 1, 2 do
print(_ENV.v6) --> nil
end
end
f(3)
任何作为 _ENV 的值的 table 被叫做环境(environment)。Lua 加载一个 chunk 的时候,此 chunk 的 _ENV 默认值为全局环境。看一个简单的例子:
复制代码 代码如下:
print(math) --> table: 000000000078BCC0
local print = print
_ENV = {}
print(math) --> nil
一个比较有趣的例子是:
复制代码 代码如下:
a = 2
do
local _ENV = {print = print, a = 14}
print(a) --> 14
end
print(a) --> 2
正如前面说的 a 会被转换为 _ENV.a,而 do end 中定义了一个新的 _ENV,因此第一个 print(a) 输出了局部变量 _ENV 的 a 的值。由此可以看到,我们可以很容易的为一个函数创建一个私有的环境:
复制代码 代码如下:
function factory(_ENV)
return function()
return a
end
end
f1 = factory{a = 6}
f2 = factory{a = 7}
print(f1()) --> 6
print(f2()) --> 7
类似的,我们在不同的函数中共享一个特定的公共环境也是很容易做到的。
test1 在
opencode + Oh-my-openagent,我的第一个免费的ai编程智能体管家:Sisyphus中评论 test..122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..Zita 在
Google AI Studio升级全栈 vibe coding体验,可直接构建带登录和数据库的应用中评论 111222..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号
