2016-10-23 12 views
1

所以我們可以說我有一個Lua文件,並在頂部,我定義任何函數之外的變量,但我把它叫做本地局部變量的Lua

local x = 1 

是否有任何區別本地x和全局x?

+1

你真的不能定義一個函數的變量之外,因爲腳本編譯爲[函數體(https://www.lua.org/manual/5.3/manual.html#3.3 0.2)。 –

回答

8

是的,因爲它是本地chunk,它是在創建。

Lua的處理塊與參數(見§3.4.11)可變數量的匿名函數體。因此,塊可以定義局部變量,接收參數和返回值。而且,這樣的匿名函數被編譯爲一個名爲_ENV的外部局部變量的範圍(參見§2.2)。結果函數總是隻有_ENV作爲唯一的upvalue,即使它不使用該變量。

考慮這個例子:

-- main.lua 
require 'other' 
print(x, y) 

-- other.lua 
local x = 5 
y = 10 

這將打印出nil, 10,因爲x是本地的,而y被指派爲的upvalue無論哪個環境 the 裝載在

參見:

而且注意,環境 Lua5.1和Lua5.2之間改變的語義: