2017-02-25 55 views
3

假設我們有下面的代碼不止一個當地人:Lua的一條線

local x = 1 
local x, y = 2, 3 

我知道第二行之後x會變成2,但是,確實在該行的地方創建一個新的x,或使用之前?

回答

3

他們將是兩個不同的地方價值:作爲第二個與在同一塊相同的名字創建了第一個將被遮蔽並且不能訪問。這裏是信息luac -l -l(LUA 5.3)示出了用於此腳本:

main <local.lua:0,0> (4 instructions at 00697ae8) 
0+ params, 3 slots, 1 upvalue, 3 locals, 3 constants, 0 functions 
    1 [1] LOADK  0 -1 ; 1 
    2 [2] LOADK  1 -2 ; 2 
    3 [2] LOADK  2 -3 ; 3 
    4 [2] RETURN  0 1 
constants (3) for 00697ae8: 
    1 1 
    2 2 
    3 3 
locals (3) for 00697ae8: 
    0 x 2 5 
    1 x 4 5 
    2 y 4 5 
upvalues (1) for 00697ae8: 
    0 _ENV 1 0 

locals部分顯示了具有兩個x具有相同結束範圍位置的三個變量。

+0

換句話說,這是非常糟糕的設計,簡單地覆蓋以前的地方在這樣的情況下。 – warspyking

+2

這是非常簡單的設計,它有它的優勢;我認爲在語言設計過程中,這種情況非常罕見,不必擔心這種情況。 –

+0

我沒有說這是對Lua的部分設計不好,我的意思是在編碼器上的結束。如果這是他們如何覆蓋他們的本地人,他們做了一個非常糟糕的工作。 – warspyking