不,不需要一遍又一遍地使用local
。由於第一行本身,變量i1
和i2
將在功能範圍內爲local
。
雖然不應該這樣做,但一遍又一遍地定義相同的變量沒有任何問題。它只會將新的堆疊位置分配給較新的位置,並對較舊的位置進行遮蔽。
下面是一個簡單的函數中的指令輸出:
function t()
local i = 2
local i = 3
end
t()
function <temp.lua:1,4> (3 instructions, 12 bytes at 00658990)
0 params, 2 slots, 0 upvalues, 2 locals, 2 constants, 0 functions
1 [2] LOADK 0 -1 ; 2
2 [3] LOADK 1 -2 ; 3
3 [4] RETURN 0 1
以及更新所述第二local i = 3
只是i = 3
:
function t()
local i = 2
i = 3
end
t()
function <temp.lua:1,4> (3 instructions, 12 bytes at 00478990)
0 params, 2 slots, 0 upvalues, 1 local, 2 constants, 0 functions
1 [2] LOADK 0 -1 ; 2
2 [3] LOADK 0 -2 ; 3
3 [4] RETURN 0 1
通知在所述第二差指令。
除此之外,該功能是相當低效的。您可以改用以下內容:
function Trim(sInput)
return sInput:match "^%s*(.-)%s*$"
end
堆棧位置(局部變量)不受垃圾收集。存儲在陰影局部變量中的值仍被視爲可訪問。 –
@EgorSkriptunoff你有一個規範參考或是基於觀察? (我知道我在編寫調試器時在標準實現中看到了影子本地人。)但是,編譯器是不是可以自由地優化堆棧使用? –
@TomBlodget - IMO,對於典型的Lua程序來說堆棧優化是非常不可能的。 –