2013-03-23 81 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