Lua 4.01循环和变量优化

时间:2016-07-02 13:33:22

标签: loops optimization lua

在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()函数仅执行一次而不是每次循环执行一次。这是一件好事。

1 个答案:

答案 0 :(得分: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
     

在循环开始之前,仅对限制和步骤进行一次评估。