lua语言local声明的局部变量在什么地方有效什么地方无效? 指的是范围

2025-02-24 14:56:32
推荐回答(1个)
回答1:

局部变量只在被声明的那个代码块内有效

代码块:控制结构,函数,chunk(变量被声明的那个文件或者文本串)

--$ cat local.lua 
x = 10
local i = 1                -- local to the chunk

while i<=x do
    local x = i*2            -- local to the while body
    print(x)                --> 2, 4, 6, 8, ...
    i = i + 1
end

if i > 20 then
    local x                -- local to the "then" body
    x = 20
    print(x + 2)
else
    print(x)                --> 10  (the global one)
end

print(x)                    --> 10  (the global one)
##$ lua local.lua 
2
4
6
8
10
12
14
16
18
20
10
10

注意,如果在交互模式下上面的例子可能不能输出期望的结果,因为第二句local i=1是一个完整的chunk,在交互模式下执行完这一句后,Lua将开始一个新的chunk,这样第二句的i已经超出了他的有效范围。可以将这段代码放在do..end(相当于c/c++的{})块中。


应该尽可能的使用局部变量,有两个好处:

1. 避免命名冲突

2. 访问局部变量的速度比全局变量更快.