Lua – 本地所需的eveytime分配了一个局部变量?

前端之家收集整理的这篇文章主要介绍了Lua – 本地所需的eveytime分配了一个局部变量?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Lua文档中发现了一段奇怪的代码
function trim8(s)
  local i1,i2 = find(s,'^%s*')
  if i2 >= i1 then s = sub(s,i2+1) end
  local i1,'%s*$')
  if i2 >= i1 then s = sub(s,1,i1-1) end
  return s
end

为什么本地再次使用i1和i2?它们是否已在局部变量中声明?每次要分配本地关键字时,是否必须重复这些关键字?

解决方法

不,没有必要一遍又一遍地使用本地.由于第一行本身,变量i1和i2将在函数范围内是局部的.

虽然不应该这样做,但一遍又一遍地定义相同的变量并没有错.它只会将堆栈中的新位置分配给较新的位置,并遮挡较旧的位置.

以下是一个简单函数的指令输出

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

并将第二个本地i = 3更新为i = 3:

function t()
    local i = 2
    i = 3
end
t()
function <temp.lua:1,12 bytes at 00478990)
0 params,1 local,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相关文章