Lua – 本地所需的eveytime分配了一个局部变量?
发布时间:2020-12-15 00:26:07 所属栏目:大数据 来源:网络整理
导读:我在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 send 为什么本地再次使用i1和i2?它们是否已在局部变量中声明
我在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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |