2013-03-23 83 views
4

我正在测试Lua的范围并且发现了一些意想不到的情况。以下代码不会打印localMainVariable。Lua中的范围规则

function functionScope() 
    print("\nIn function") 
    print("globalMainVariable: " .. globalMainVariable) 
    if (localMainVariable ~= nil) then print("localMainVariable: " .. localMainVariable) end 
end 

globalMainVariable = "Visible" 
local localMainVariable = "Visible" 
functionScope() 

但下面的代码打印localMainVariable。

globalMainVariable = "Visible" 
local localMainVariable = "Visible" 

function functionScope() 
    print("\nIn function") 
    print("globalMainVariable: " .. globalMainVariable) 
    if (localMainVariable ~= nil) then print("localMainVariable: " .. localMainVariable) end 
end 

functionScope() 

我知道它有什么做的localMainVariable被宣布在那里,但我想使它本地会限制变量的作用域。实际的规则是什么?

感谢

+1

刚提的是,在第二个例子中,'localMainVariable'被称为** **的upvalue为'functionScope'功能。 – Vercas 2013-03-23 18:03:16

回答

4

一个局部变量的范围开始的第一个语句的 声明后,并且一直持续到 最里面块包含声明的最后一个非空语句。

Lua manual