3
local x = 1
local x, y = 2, 3
を私はx
しかし、そのライン上のローカルは、新しいx
を作成しない、二行目の後に2になります知っています、前に使用していますか?
local x = 1
local x, y = 2, 3
を私はx
しかし、そのライン上のローカルは、新しいx
を作成しない、二行目の後に2になります知っています、前に使用していますか?
これらは、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)このスクリプトのため示している情報です。
つまり、これは非常に悪い設計です。このような状況では、以前のローカルを上書きするだけです。 – warspyking
これは非常にシンプルなデザインで、その利点があります。私は、これが言語設計中にこの事件を心配するほど稀であると思います。 –
私はそれがLuaの部分では悪いデザインであると言っていませんでした。私はコーダーの終わりを意味しました。これが彼らの地元の人を上書きする方法であれば、彼らは本当に悪い仕事をしています。 – warspyking