第一版是為 Lua 5.0 編寫的。雖然在很大程度上仍然適用於後續版本,但仍有一些差異。
第四版鎖定 Lua 5.3,可在 Amazon 和其他書店購買。
購買這本書,您也可以協助 支援 Lua 專案


4.3.5 – 一般 for

一般 for 迴圈允許您遍歷由迭代器函式傳回的所有值。我們已經看過一般 for 的範例

    -- print all values of array `a'
    for i,v in ipairs(a) do print(v) end
在該程式碼的每一步中,i 會取得索引,而 v 會取得與該索引關聯的值。類似的範例顯示我們如何遍歷表格的所有鍵
    -- print all keys of table `t'
    for k in pairs(t) do print(k) end
儘管一般 for 看起來很簡單,但功能卻很強大。使用適當的迭代器,我們可以遍歷幾乎所有內容,而且以可讀的方式進行。標準函式庫提供多個迭代器,允許我們遍歷檔案中的行(io.lines)、表格中的成對值(pairs)、字串中的字(string.gfind,我們將在 第 20 章 中看到),等等。當然,我們可以撰寫自己的迭代器。雖然使用一般 for 很容易,但撰寫迭代器函式的任務有其微妙之處。我們將在後面的 第 7 章 中探討這個主題。

一般迴圈與數字迴圈共用兩個特性:迴圈變數是迴圈主體的區域變數,而且您不應該將任何值指定給迴圈變數。

讓我們來看一個使用一般 for 的更具體範例。假設您有一個表格,其中包含星期幾的名稱

    days = {"Sunday", "Monday", "Tuesday", "Wednesday",
            "Thursday", "Friday", "Saturday"}
現在,您想要將名稱轉換為它在星期中的位置。您可以搜尋表格,尋找給定的名稱。然而,在 Lua 中,更有效率的方法通常是建立一個反向表格,例如 revDays,其中名稱為索引,數字為值。該表格會如下所示
    revDays = {["Sunday"] = 1, ["Monday"] = 2,
                ["Tuesday"] = 3, ["Wednesday"] = 4,
                ["Thursday"] = 5, ["Friday"] = 6,
                ["Saturday"] = 7}
然後,您所要做的就是索引這個反向表格,就能找到名稱的順序
    x = "Tuesday"
    print(revDays[x])    --> 3
當然,我們不需要手動宣告反向表格。我們可以從原始表格自動建立它
    revDays = {}
    for i,v in ipairs(days) do
      revDays[v] = i
    end
迴圈會對 days 的每個元素進行指定,其中變數 i 取得索引(1、2、...),而 v 取得值("Sunday""Monday"、...)。