Lua中每次本地分配变量是否都涉及一个长尾词过程?

2026-04-01 19:121阅读0评论SEO资源
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计443个文字,预计阅读时间需要2分钟。

Lua中每次本地分配变量是否都涉及一个长尾词过程?

在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 send` 为什么本地再次使用?

我在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

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

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

Lua中每次本地分配变量是否都涉及一个长尾词过程?

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

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

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,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

本文共计443个文字,预计阅读时间需要2分钟。

Lua中每次本地分配变量是否都涉及一个长尾词过程?

在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 send` 为什么本地再次使用?

我在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

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

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

Lua中每次本地分配变量是否都涉及一个长尾词过程?

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

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

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,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