Loops Lua 4.01循环和变量优化
在Lua4.01中,第二个示例循环会比第一个更有效吗?(对不起,我不知道描述该问题的正确术语。) 还有第三个和第四个例子呢:Loops Lua 4.01循环和变量优化,loops,optimization,lua,Loops,Optimization,Lua,在Lua4.01中,第二个示例循环会比第一个更有效吗?(对不起,我不知道描述该问题的正确术语。) 还有第三个和第四个例子呢: for k = 1, 4 do bigTable[3][k] ... end local tempTable = bigTable[3] for k = 1, 4 do tempTable[k] ... end 我知道在一些脚本语言中就是这样。谢谢 [编辑] 我刚刚提出了一些测试代码来检查示例1和示例2 这表明示例#1中的getn()函
for k = 1, 4 do
bigTable[3][k]
...
end
local tempTable = bigTable[3]
for k = 1, 4 do
tempTable[k]
...
end
我知道在一些脚本语言中就是这样。谢谢
[编辑]
我刚刚提出了一些测试代码来检查示例1和示例2
这表明示例#1中的getn()函数只执行一次total,而不是每次循环执行一次。这是一件好事。对于问题的第一部分,答案(见§4.4.4)很清楚: 像这样的陈述
for var = e1 ,e2, e3 do block end
等同于代码:
do
local var, _limit, _step = tonumber(e1), tonumber(e2), tonumber(e3)
if not (var and _limit and _step) then error() end
while (_step>0 and var<=_limit) or (_step<=0 and var>=_limit) do
block
var = var+_step
end
end
do
局部变量,极限,阶跃=tonumber(e1),tonumber(e2),tonumber(e3)
如果不是(var和_limit和_step),则错误()结束
虽然(_step>0和var1 vs 2:1,虽然变化不大。3 vs 4:4肯定是4,但每个循环只有一个表访问加上tentable
是本地的,这意味着访问速度更快。我之所以问#1 vs#2,是因为在某些语言中(JavaScript)每次遍历循环时都会执行getn位。我为#1 vs#2添加了一些测试代码。不确定如何测试#3 vs#4。不,在Lua中
循环的规范在开始时只计算一次。而要测试#3 vs#4,您唯一能做的事情就是确定所用的时间。无论如何,您会发现#4更快。
for var = e1 ,e2, e3 do block end
do
local var, _limit, _step = tonumber(e1), tonumber(e2), tonumber(e3)
if not (var and _limit and _step) then error() end
while (_step>0 and var<=_limit) or (_step<=0 and var>=_limit) do
block
var = var+_step
end
end