gpt4 book ai didi

Lua-每次分配局部变量时都需要local吗?

转载 作者:行者123 更新时间:2023-12-04 03:36:36 24 4
gpt4 key购买 nike

我在Lua文档中发现了一段奇怪的代码:

function trim8(s)
local i1,i2 = find(s,'^%s*')
if i2 >= i1 then s = sub(s,i2+1) end
local i1,i2 = find(s,'%s*$')
if i2 >= i1 then s = sub(s,1,i1-1) end
return s
end

为什么将 local再次与 i1i2一起使用?他们不是已经在局部变量中声明了吗?每次要分配它们时都需要重复 local关键字吗?

最佳答案

不,没有必要一遍又一遍地使用local。由于第一行本身,变量i1i2在函数范围内将是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

关于Lua-每次分配局部变量时都需要local吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35742692/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com