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 和 #2。

function Return_a_Number()
    print"############# 我正在循环中。"return 5
end

for i = 1, Return_a_Number()do
    -- 无操作
end

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

点赞
用户107090
用户107090

对于第一部分的问题,手册(参见§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

限制和步长都只会在循环开始前被评估一次。

2016-07-02 15:52:27