我应该将函数中的变量定义为lua中的local

时间:2014-07-14 04:37:38

标签: lua

例如

function foo1()
    local i=10 --or just i=10
end 

变量i在函数外部不可见。所以我应该明确地将其声明为local。或者它已经是local变量。

2 个答案:

答案 0 :(得分:4)

online Lua ref manual, section 2.3

中明确说明了这一点
  

除非明确声明为本地变量(参见§2.4.7)

,否则假定任何变量都是全局变量

答案 1 :(得分:3)

在Lua中,每个未明确声明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 ......

相关问题