2016-07-02 55 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 

在循環開始之前,限制和步驟都只評估一次。