5

私はLuaを学んでいて、同じ名前の 2 つのローカル変数を参照できるかどうか疑問に思っていました。

たとえば、次のコード セグメントでは、構文は有効ですか (未定義の動作なし)?

動いているので聞いてみたのですが、裏で何が起こっているのかわかりません。これは単に同じxローカルを参照しているだけですか? それともlocal x、舞台裏で物事を台無しにする 2 つの変数が存在するのでしょうか。ここで正確に何が起こっているのか、なぜそうなのかを知りたいです。

local x = 5 + 3; -- = 8
local x = 3 - 2; -- = 1

print("x = " .. x); -- x = 1
4

3 に答える 3

8

すべてのローカル変数は Lua によって記憶されています :-)

local x = 5 + 3; -- = 8
local x = 3 - 2; -- = 1

local i = 0
repeat
   i = i + 1
   local name, value = debug.getlocal(1, i)
   if name == 'x' then
      print(name..' = '..value)
   end
until not name
于 2013-06-06T15:39:57.623 に答える
8

2 つの変数があります。2 番目のシャドウは、最初のシャドウ (ただし、削除または上書きはしません) です。

クロージャーを介して以前の定義にアクセスできる場合もあります。

local x = 5 + 3
local function getX1()
  return x
end
local x = 3 - 2
local function getX2()
  return x
end

print("x = " .. x); -- x = 1
print("x = " .. getX1()); -- x = 8
print("x = " .. getX2()); -- x = 1
于 2013-06-06T14:18:46.417 に答える