第一版是為 Lua 5.0 編寫的。雖然在很大程度上仍然適用於後續版本,但有些地方有所不同。
第四版針對 Lua 5.3,可在 Amazon 和其他書店買到。
購買這本書,您也同時協助 支援 Lua 專案。
![]() |
用 Lua 程式設計 | ![]() |
第一部。語言 第 1 章。入門 |
Lua 執行的每段程式碼,例如檔案或互動模式中的單一行,都是一個程式區塊。更具體地說,程式區塊只是一個陳述式序列。
每個陳述式後面都可以選擇性地加上分號。通常,我只使用分號來分隔寫在同一行中的兩個或多個陳述式,但這只是一個慣例。換行在 Lua 的語法中沒有作用;例如,以下四個程式區塊都是有效且等效的
a = 1 b = a*2 a = 1; b = a*2; a = 1 ; b = a*2 a = 1 b = a*2 -- ugly, but valid
程式區塊可以像「hello world」範例中一樣簡單,只有一個陳述式,也可以由陳述式和函式定義(實際上是指定,我們稍後會看到)組成,例如階乘範例。程式區塊可以任意大。由於 Lua 也用作資料描述語言,因此數個 MB 的程式區塊並不少見。Lua 解譯器對於大型程式區塊完全沒有問題。
您不必將程式寫成檔案,也可以在互動模式下執行獨立的解譯器。如果您在沒有任何引數的情況下呼叫 Lua,您會看到它的提示
Lua 5.0 Copyright (C) 1994-2003 Tecgraf, PUC-Rio >之後,您鍵入的每個指令(例如
print "Hello World"
)都會在您按下 <enter>
之後立即執行。若要離開互動模式和解譯器,只需鍵入檔案結束(在 Unix 中為 ctrl-D
,在 DOS/Windows 中為 ctrl-Z
),或從作業系統函式庫呼叫 exit
函式(您必須鍵入 os.exit()<enter>
)。
在互動模式中,Lua 通常會將你輸入的每一行視為一個完整的區塊來解釋。然而,如果它偵測到該行無法形成一個完整的區塊,它會等待更多輸入,直到它有一個完整的區塊。當 Lua 正在等待行延續時,它會顯示一個不同的提示(通常為 >>
)。因此,你可以直接在互動模式中輸入多行定義,例如 factorial
函數。然而,有時將這些定義放入一個檔案中會更方便,然後呼叫 Lua 來執行該檔案。
你可以透過使用 -l
選項,將一系列的區塊作為引數傳遞給獨立的解釋器來執行它們。例如,如果你有一個包含單一陳述式 x=1
的檔案 a
,以及另一個包含陳述式 print(x)
的檔案 b
,則命令列
prompt> lua -la -lb將會執行
a
中的區塊,然後執行 b
中的區塊,它會印出預期的 1。(-l
選項實際上會呼叫 require
,它會在特定路徑中尋找檔案。因此,如果此路徑不包含目前目錄,則前一個範例將無法運作。我們將在 第 8.1 節 中更詳細地討論 require
函數。)
你可以使用 -i
選項來指示 Lua 在執行給定的區塊後開始一個互動式工作階段。像這樣的命令列
prompt> lua -i -la -lb將會執行
a
中的區塊,然後執行 b
中的區塊,然後提示你進行互動。這對於除錯和手動測試特別有用。在本章的最後,我們將看到獨立解釋器的其他選項。
連結區塊的另一種方式是使用 dofile
函數,它會立即執行一個檔案。例如,你可能有一個檔案 lib1.lua
-- file 'lib1.lua' function norm (x, y) local n2 = x^2 + y^2 return math.sqrt(n2) end function twice (x) return 2*x end然後,在互動模式中,你可以輸入
> dofile("lib1.lua") -- load your library > n = norm(3.4, 1.0) > print(twice(n)) --> 7.0880180586677
當你在測試一段程式碼時,dofile
函式也很有用。你可以使用兩個視窗:其中一個是包含你的程式碼的文字編輯器(例如在檔案 prog.lua
中),另一個是在互動模式下執行 Lua 的主控台。在你對程式碼進行修改並儲存後,你在 Lua 主控台中執行 dofile("prog.lua")
以載入新的程式碼;然後你可以執行新的程式碼,呼叫其函式並列印結果。
版權所有 © 2003–2004 Roberto Ierusalimschy。保留所有權利。 | ![]() |