全局变量/局部变量/虚变量
一)全局-局部变量
全局变量是指:这个变量在没有被同名局部变量覆盖的时候,所有代码块都是可见的。
局部变量是指:该变量只在被申明的代码块中可见,并且可以覆盖同名全局变量或者外层局部变量。
Lua 中的局部变量要用 local 关键字来显式定义,不使用 local 显式定义的变量就是全局变量:
g_var = 1 -- 全局变量
local l_var = 2 -- 局部变量1)局部变量作用域 局部变量的生命周期是有限的,它的作用域仅限于声明它的块(block)。
一个块是一个控制结构的执行体、或者是一个函数的执行体再或者是一个程序块(chunk)。
我们可以通过下面这个例子来理解一下局部变量作用域的问题:
x = 10 -- 全局变量
local i = 1 -- 程序块中的局部变量 i
while i <=x do -- 判断条件的x为全局变量的x
local x = i * 2 -- while 循环体中的局部变量 x
print(x) -- output: 2, 4, 6, 8, ...
i = i + 1
end
print("while循环结束");
if i > 20 then
local x -- then 中的局部变量 x
x = 20
print(x + 2) -- 如果i > 20 将会打印 22,此处的 x 是局部变量
else
print(x) -- 打印 10,这里 x 是全局变量
end
print(x) -- 打印 102)使用局部变量的好处
局部变量可以避免因为命名问题污染了全局环境
local 变量的访问比全局变量更快 由于局部变量出了作用域之后生命周期结束,这样可以被垃圾回收器及时释放
在生产环境中,我们应该尽可能用 局部变量。
3)全局变量,其实本质上也是一个table
它把我们创建的全局变量都保存到一个table里了。而这个table的名字是:_G
二)虚变量
当一个方法返回多个值时,有些返回值有时候用不到,要是声明很多变量来一一接收,显然不太合适(不是不能)。 Lua 提供了一个虚变量,以单个下划线(“_”)来命名,用它来丢弃不需要的数值,仅仅起到占位的作用。
代码倒数第二行,定义了一个用 local 修饰的 虚变量(即 单个下划线)。使用这个虚变量接收 string.find() 第一个返回值,静默丢掉,这样就直接得到第二个返回值了。
虚变量不仅仅可以被用在返回值,还可以用在迭代等。
结果:
Last updated
Was this helpful?