例如
function foo1()
local i=10 --or just i=10
end
变量i
在函数外部不可见。所以我应该明确地将其声明为local
。或者它已经是local
变量。
答案 0 :(得分:4)
online Lua ref manual, section 2.3:
中明确说明了这一点除非明确声明为本地变量(参见§2.4.7)
,否则假定任何变量都是全局变量
答案 1 :(得分:3)
local
的变量(参数除外,因为它们是VM隐式创建的upvalue locals)是全局的,所以这样做:
function foo1()
i=10
end
foo1()
print(i) -- prints "10"
与:
完全相同function foo1()
_G["i"]=10
end
foo1()
print(i) -- prints "10"
这很糟糕。所以你应该声明为:
function foo1()
local i=10
end
foo1()
print(i) -- prints "nil", so it's local
编辑:但请注意关闭的上升值。
例如这样:
function foo()
local i=10
local function bar()
i=5
end
print(i) -- 10
bar()
print(i) -- 5
end
print(i) -- nil
foo()
print(i) -- nil
编辑2:另外,你应该考虑将你的功能设置为本地功能,这样它们就不会使全局表变得臃肿。只需将它们声明为local function ......