在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 :(得分: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
在循环开始之前,仅对限制和步骤进行一次评估。