第一版是為 Lua 5.0 編寫的。雖然在很大程度上仍然適用於後續版本,但仍有一些差異。
第四版鎖定 Lua 5.3,可在 Amazon 和其他書店購買。
購買這本書,您也可以協助 支援 Lua 專案。
![]() |
用 Lua 進行程式設計 | ![]() |
第一部分。語言 第 4 章。陳述式 |
一般 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"
、...)。
版權所有 © 2003–2004 Roberto Ierusalimschy。保留所有權利。 | ![]() |