2017-02-25 7 views
3

Luaの複数の地元

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

を私はxしかし、そのライン上のローカルは、新しいxを作成しない、二行目の後に2になります知っています、前に使用していますか?

答えて

3

これらは、2つの異なるローカル値になります。最初のブロックは、同じブロック内に同じ名前で作成されるため、シャドウされ、アクセスできません。

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セクションは、同じエンドのスコープ位置を有する2つx有する三つの変数を示しています。ここでluac -l -l(LUA 5.3)このスクリプトのため示している情報です。

+0

つまり、これは非常に悪い設計です。このような状況では、以前のローカルを上書きするだけです。 – warspyking

+2

これは非常にシンプルなデザインで、その利点があります。私は、これが言語設計中にこの事件を心配するほど稀であると思います。 –

+0

私はそれがLuaの部分では悪いデザインであると言っていませんでした。私はコーダーの終わりを意味しました。これが彼らの地元の人を上書きする方法であれば、彼らは本当に悪い仕事をしています。 – warspyking