2016-07-02 53 views
1

在Lua 4.01中,第二个示例循环会比第一个循环效率更高吗? (对不起,我不知道正确的术语来描述这个问题。)Lua 4.01循环和变量优化

for k = 1, getn(myTable) do 
    ... 
end 

local numTable = getn(myTable) 
for k = 1, numTable do 
    ... 
end 

而且那第三与第四个例子:

for k = 1, 4 do 
    bigTable[3][k] 
    ... 
end 

local tempTable = bigTable[3] 
for k = 1, 4 do 
    tempTable[k] 
    ... 
end 

我知道在一些脚本语言中,这是案件。谢谢。

[编辑]

我只是想出了一些测试代码来检查例子#1#VS 2。

function Return_a_Number() 
    print("############# I am looping.") 
    return 5 
end 

for i = 1, Return_a_Number() do 
    -- do nothing 
end 

这表明示例#1中的getn()函数仅执行一次总计而不是每个循环一次。这是一件好事。

+0

1对2:1,尽管它没有改变那么多。 3 vs 4:绝对4,每个循环只有一个表访问加'tempTable'是本地的,这意味着访问速度更快。 – user6245072

+0

我问#1 vs#2的原因是,在某些语言(JavaScript)中,getn位会在每次遍历循环时执行。 – posfan12

+0

我为#1和#2添加了一些测试代码。不知道如何测试#3和#4。 – posfan12

回答

2

对于问题的第一部分,所述manual(见§4.4.4)是明确的:

for语句等

 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 

在循环开始之前,限制和步骤都只评估一次。