2017-02-25 25 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