Lua
Lua 編程語言中文教學網站 | 香港編程學院

從零開始學 Lua
完整繁體中文教學

這是一個適合初學者到進階入門者的 Lua 教學網站。你會學到變數、資料型別、條件判斷、迴圈、函式、資料表、模組、錯誤處理,以及 Lua 在遊戲腳本、設定檔與自動化中的典型應用。

Lua 的設計重點是簡潔、可擴充、可嵌入,並以 table 作為核心資料結構,這也是它在遊戲開發與嵌入式腳本場景中特別受歡迎的原因。

課程總覽

Lua 是一種動態型別、語法精簡的腳本語言。變數本身沒有固定型別,型別附著在值上;table 是 Lua 最重要也最有代表性的資料結構;函式是一等公民,可儲存在變數與 table 中,也可作為參數傳遞。

學習建議:先掌握 localifforfunctiontable,再進入模組與錯誤處理,會更容易理解 Lua 的設計思路。

語法教學

以下章節依照學習順序整理 Lua 的常用語法,並搭配簡潔程式碼範例。整體語法與關鍵規則參考官方手冊與 Programming in Lua 的教學脈絡。

1. 註解與基本結構

單行與多行註解

Lua 使用 -- 建立單行註解;多行文字可使用長括號語法,常見寫法為 --[[ ... ]]

-- 這是一行註解 --[[ 這是一段多行註解 可用來說明較長的程式片段 ]]

Lua 對空白與換行相對寬鬆,程式可自由排版,但良好的縮排仍然很重要。

2. 變數與資料型別

值有型別,變數本身沒有固定型別

Lua 是動態型別語言,變數不需要先宣告型別。常見基本型別包括 nilbooleannumberstringfunctiontable 等。

local name = "Lua" local version = 5.4 local isEasy = true local nothing = nil print(type(name)) -- string print(type(version)) -- number print(type(isEasy)) -- boolean print(type(nothing)) -- nil

建議初學時盡量使用 local 宣告區域變數,避免不小心建立全域變數。

3. 運算子

算術、比較、邏輯、字串串接

Lua 常見運算包含算術運算、比較運算、邏輯運算,以及用 .. 進行字串串接。

類型 語法 說明
算術 + - * / // % ^ 包含加減乘除、整除、餘數、次方
比較 == ~= < > <= >= Lua 的不等於是 ~=
邏輯 and or not 用於條件判斷與布林運算
字串 .. 將兩段文字串接
local a = 10 local b = 3 print(a + b) -- 13 print(a // b) -- 3 print(a % b) -- 1 print("Lua" .. " 教學") -- Lua 教學 print(a ~= b) -- true
4. 條件判斷

if / elseif / else

Lua 的條件區塊以 then 開始,最後以 end 結束。

local score = 85 if score >= 90 then print("A") elseif score >= 80 then print("B") elseif score >= 60 then print("C") else print("不及格") end

在 Lua 中,只有 falsenil 會被視為假;數字 0 仍然是真。

5. 迴圈

while、repeat、for

Lua 提供多種迴圈結構,其中數值型 for 與通用型 for 特別常見。

-- while local i = 1 while i <= 3 do print("while:", i) i = i + 1 end -- repeat...until local n = 1 repeat print("repeat:", n) n = n + 1 until n > 3 -- 數值 for for x = 1, 5 do print("for:", x) end
補充:repeat...until 和 while 的差別

repeat...until 至少會執行一次,再檢查條件; while 則是先檢查條件,成立才執行。

6. 函式

函式是一等公民

Lua 的函式可以命名、匿名、存入變數、當成參數傳遞,也可以回傳多個值。

local function add(a, b) return a + b end print(add(3, 5)) -- 8 function getUser() return "小明", 18 end local name, age = getUser() print(name, age) -- 小明 18

多重回傳是 Lua 很實用的特性,常用在回傳結果與狀態、值與錯誤訊息等場景。

7. Table 資料表

Lua 最重要的資料結構

table 可以同時扮演陣列、字典、物件、集合與記錄。這也是 Lua 的核心能力之一。

local user = { name = "Ava", age = 20, skills = {"Lua", "Python", "C#"}, active = true } print(user.name) -- Ava print(user["age"]) -- 20 print(user.skills[1]) -- Lua user.city = "Taipei"

若 key 是合法識別字,可用點記法 user.name; 否則可用索引記法 user["user-name"]

8. 模組化

把功能整理成可重用模組

常見做法是建立一個 table,將函式掛在其中,最後 return 該 table,讓其他檔案用 require 載入。

-- math_tools.lua local M = {} function M.square(x) return x * x end function M.cube(x) return x * x * x end return M
-- main.lua local mathTools = require("math_tools") print(mathTools.square(4)) -- 16

模組化能讓程式更容易維護,也適合大型專案分工。

9. 錯誤處理

error、pcall、xpcall

Lua 可使用 error() 主動拋出錯誤,再用 pcall() 進行保護呼叫,避免程式直接中止。

local function divide(a, b) if b == 0 then error("除數不能為 0") end return a / b end local ok, result = pcall(function() return divide(10, 0) end) if ok then print("結果:", result) else print("發生錯誤:", result) end

這種寫法很適合用在讀檔、模組載入、使用者輸入驗證等場景。

10. 快速記憶區

Lua 語法速查

主題 常見語法 說明
區域變數 local x = 10 建議優先使用,避免污染全域
交換變數 a, b = b, a Lua 支援多重指定
字串長文字 [[長文字內容]] 適合多行字串
數值 for for i = 1, 10, 2 do ... end 開始、結束、步進值
通用 for for k, v in pairs(t) do ... end 走訪 table 常用
匿名函式 local f = function(x) return x*2 end 可作為回呼函式
不等於 ~= 不是 !=
字串串接 "Lua" .. "Lang" 使用兩個句點

範例應用例子

下面用三個常見情境展示 Lua 的應用方式,讓你不只知道語法,也知道怎麼把語法組合成能工作的程式。

入門專案 條件判斷

範例一:學生成績等級判斷

透過函式與 if 判斷成績區間,回傳等第與簡短評語。

local function getGrade(score) if score >= 90 then return "A", "表現優秀" elseif score >= 80 then return "B", "表現良好" elseif score >= 60 then return "C", "及格" else return "D", "需要加強" end end local grade, comment = getGrade(87) print(grade, comment)

這個例子示範了多重回傳值:函式可一次回傳等第與評語,呼叫端再分別接收。

資料處理 table

範例二:商品庫存管理

以 table 儲存商品資訊,再用迴圈走訪資料,計算是否需要補貨。

local items = { {name = "鍵盤", stock = 12}, {name = "滑鼠", stock = 3}, {name = "耳機", stock = 8} } for i, item in ipairs(items) do if item.stock < 5 then print(item.name .. ":庫存不足,請補貨") else print(item.name .. ":庫存正常") end end

這種結構很常出現在遊戲道具表、商城資料、設定檔解析與簡單後台邏輯中。

程式組織 模組化

範例三:建立工具模組

把常用功能集中到模組,讓主程式只保留清楚的流程。

-- string_tools.lua local M = {} function M.shout(text) return string.upper(text) .. "!" end function M.wrap(text) return "[" .. text .. "]" end return M
-- main.lua local tools = require("string_tools") print(tools.shout("hello")) print(tools.wrap("Lua"))

模組化是從練習程式邁向專案開發的重要一步,能降低重複程式碼並提升可讀性。

延伸思考

Lua 常見應用場景

Lua 常被用於遊戲腳本、設定檔、嵌入式系統、工具自動化與資料描述。它的優勢在於語言小巧、可嵌入 C/C++ 程式、table 足夠靈活,以及函式可作為值處理,使腳本擴充很自然。

如果你是初學者,下一步該做什麼?

可以從「做一個小計算機」、「做一個文字選單遊戲」、「讀取設定 table 並輸出結果」這三種練習開始。只要能把變數、條件、迴圈、函式、table 串起來,你就已經具備 Lua 基礎實戰能力。

互動小測驗

完成以下 8 題後,按下「計算分數」即可立即看到結果與學習建議。這些題目涵蓋基礎語法、table、函式與錯誤處理。

1. Lua 中宣告區域變數的關鍵字是什麼?

2. Lua 中表示「不等於」的運算子是哪一個?

3. 下列哪一個是 Lua 用來串接字串的運算子?

4. 在 Lua 中,哪一種資料結構同時可當陣列與字典使用?

5. 哪一個敘述正確描述 repeat...until

6. 哪一個函式可用於保護呼叫,避免錯誤直接讓程式中止?

7. 若函式回傳多個值,接收方式應該是哪一種?

8. 在 Lua 中,哪兩個值會被視為假?

作答提示:可按 Tab 鍵快速切換選項。

資料來源與參考

本頁教學內容的語法規則、核心概念與學習脈絡主要參考 Lua 官方文件與官方教學書籍目錄頁。

Lua 5.4 Reference Manual
官方語法與語義定義,涵蓋型別、控制結構、函式、table、模組、錯誤處理等核心內容。
https://www.lua.org/manual/5.4/manual.html
Programming in Lua
由 Lua 主要作者撰寫的教學書資源,適合補充語法背後的設計理念與實務思路。
https://www.lua.org/pil/contents.html