Lua 入門教程:從環境搭建到基礎編程
Lua 是一種輕量級、可擴展的腳本語言,廣泛應用于游戲開發(如《魔獸世界》《Roblox》)、嵌入式系統、Web 后端等領域。它語法簡潔、運行高效,非常適合作為編程入門語言或輔助開發工具。本教程將帶您從零開始,逐步掌握 Lua 的核心基礎。
1?? 環境搭建:讓 Lua 跑起來
在開始編寫 Lua 代碼前,需先搭建運行環境,主要分為 “在線編輯器” 和 “本地安裝” 兩種方式,新手推薦優先使用在線編輯器快速體驗語法。
在線編輯器(文本編輯器)
推薦使用下面任意網站:
https://www.mycompiler.io/new/lua
https://onecompiler.com/lua/
https://www.tutorialspoint.com/compilers/online-lua-compiler.htm
打開網頁即可直接編寫和運行代碼,無需配置環境,適合快速測試小段代碼。
在線編輯器(交互式/Terminal)
- https://www.tutorialspoint.com/compilers/online-lua-terminal.htm
本地安裝(Windows 系統為例)
- 步驟 1:下載 Lua
訪問 Lua 官方網站(www.lua.org),進入 “Download” 頁面,然后找到LuaBinaries,下載適合 鏈接(如Lua 5.1.5 - Release 1)。
然后在打開的頁面,選擇
Tools Executables
目錄
最后選擇win64版本即可
- 步驟 2:解壓并配置環境變量
將壓縮包解壓到任意目錄(如
D:\lua
),打開 “此電腦”→右鍵 “屬性”→“高級系統設置”→“環境變量”,在 “系統變量” 的 “Path” 中添加D:\lua
(解壓目錄路徑)。
然后創建文件
lua5.1.exe
的快捷方式,然后重命名為lua.exe
,方便后續調用。
- 步驟 3:驗證安裝
按下
Win+R
,輸入cmd
打開命令提示符,輸入lua -v
,若顯示如下內容,則安裝成功。
編寫第一個 Lua 程序
無論是在線編輯器還是本地環境,新建后綴為
.lua
的文件(如hello.lua
),輸入以下代碼:
編寫第一個 Lua 程序
無論是在線編輯器還是本地環境,新建一個后綴為.lua的文件(如hello.lua),輸入以下代碼:
-- 這是單行注釋(雙連字符開頭)
print("Hello, Lua!") -- 打印內容到控制臺
-
本地運行:打開命令提示符,進入文件所在目錄,輸入
lua hello.lua
,輸出 “Hello, Lua!”。 -
在線運行:點擊編輯器 “Run” 按鈕,直接查看結果。
2?? 基礎語法:變量與數據類型
Lua 是動態類型語言,無需提前聲明變量類型,變量類型會根據賦值自動確定,核心包含 “變量聲明賦值” 和 “常用數據類型” 兩部分。
變量聲明與賦值
Lua 變量分為 “全局變量” 和 “局部變量”:
- 全局變量:直接賦值即可(默認全局),如
name = "Lua"
、age = 29
; - 局部變量:用
local
關鍵字聲明,僅在當前代碼塊(函數、循環)有效,推薦優先使用(避免全局變量污染),如local score = 95.5
; - 多變量賦值(Lua 特色語法):
a, b, c = 10, "test", false
,執行后a=10
、b="test"
、c=false
,打印結果為10 test false
。
-- 全局變量
name = "Lua"
age = 29 -- Lua誕生于1993年-- 局部變量(推薦優先使用,避免全局變量污染)
local score = 95.5
local isUseful = true -- 布爾值:true(真)或 false(假)-- 多變量賦值(Lua的特色語法)
a, b, c = 10, "test", false
print(a, b, c) -- 輸出:10 test false
常用數據類型
Lua 共 8 種數據類型,新手重點掌握以下 5 種,具體說明如下表:
類型 | 說明 | 示例 |
---|---|---|
nil | 空值,表示變量未定義或為空 | x = nil |
boolean | 布爾值,僅true 和false | isOk = true |
number | 數值(整數 / 浮點數,不區分) | num1 = 20 ,num2 = 3.14 |
string | 字符串(單 / 雙引號包裹) | "Hello" ,'Lua' |
table | 表(類似數組 / 字典,核心結構) | arr = {1, 2, 3} |
(1)字符串操作
字符串用..
連接,用#
獲取長度,示例:
str1 = "Hello"
str2 = "Lua"
-- 字符串連接
fullStr = str1 .. " " .. str2 -- 結果:"Hello Lua"
-- 獲取字符串長度
strLen = #fullStr -- 結果:9("Hello Lua"共9個字符)
print(fullStr, strLen) -- 輸出:Hello Lua 9
(2)表(table)基礎
表是 Lua 最靈活的數據結構,可當數組或字典使用:
- 數組(索引從 1 開始):
arr = {10, 20, 30}
,arr[1]=10
、arr[2]=20
,打印arr[1]
輸出10
; - 字典(鍵值對):
person = {name = "Tom", age = 18}
,通過person.name
或person["name"]
獲取值,打印person.name
輸出Tom
; - 混合使用:
mixTable = {"apple", "banana", price = 5.8}
,mixTable[2]="banana"
、mixTable.price=5.8
,打印結果為banana 5.8
。
-- 1. 數組(索引從1開始,這是Lua與其他語言的區別)
arr = {10, 20, 30} -- 索引1→10,索引2→20,索引3→30
print(arr[1]) -- 輸出:10(注意:不是arr[0])-- 2. 字典(鍵值對形式)
person = {name = "Tom",age = 18,score = 92
}
print(person.name) -- 輸出:Tom(等價于person["name"])-- 3. 混合使用
mixTable = {"apple", "banana", -- 數組部分:索引1→apple,索引2→bananaprice = 5.8, -- 字典部分:鍵price→5.8count = 10
}
print(mixTable[2], mixTable.price) -- 輸出:banana 5.8
3?? 流程控制:條件與循環
流程控制用于控制代碼執行順序,核心包含 “條件判斷(if-else)” 和 “循環(for、while)”,是實現邏輯分支與重復執行的關鍵。
條件判斷(if-else)
語法格式:
if 條件1 then-- 條件1為true時執行
elseif 條件2 then-- 條件1為false,條件2為true時執行
else-- 所有條件都為false時執行
end
示例(根據分數判斷等級):
local score = 85
if score >= 90 thenprint("優秀")
elseif score >= 80 thenprint("良好")
elseif score >= 60 thenprint("及格")
elseprint("不及格")
end
-- 輸出:良好
循環(for、while)
(1)for 循環(最常用)
分為 “數值 for 循環” 和 “泛型 for 循環”:
- 數值 for 循環:
for 變量=起始值,結束值,步長 do ... end
(步長默認 1,可省略),示例 1(打印 1-5):
for i = 1, 5 doprint(i) -- 輸出:1 2 3 4 5
end
示例 2(打印 10-2,步長 - 2):
for j = 10, 2, -2 doprint(j) -- 輸出:10 8 6 4 2
end
- 泛型 for 循環:用于遍歷表 / 字符串,需配合
ipairs
(遍歷數組),示例(遍歷數組):
arr = {"a", "b", "c"}
for index, value in ipairs(arr) doprint("索引:" .. index .. ",值:" .. value)
end
輸出:
索引:1,值:a
索引:2,值:b
索引:3,值:c
(2)while 循環
語法格式:while 條件 do ... end
(條件為 true 時持續執行),示例(計算 1-10 的和):
local sum = 0
local i = 1while i <= 10 dosum = sum + i -- 累加求和i = i + 1 -- 更新循環變量,避免無限循環
end
print("1到10的和:" .. sum) -- 輸出:1到10的和:55
4?? 函數:代碼的復用與封裝
函數是可重復調用的代碼塊,用于封裝邏輯、提高復用性,Lua 中函數支持 “多返回值” 和 “匿名函數”,是代碼模塊化的核心。
函數定義與調用
語法格式:
function 函數名(參數1, 參數2, ...)-- 函數體return 返回值1, 返回值2, ... -- 可選,支持多返回值
end
示例 1(計算兩數之和):
function add(a, b)local result = a + breturn result
endlocal total = add(5, 3)
print("5+3=" .. total) -- 輸出:5+3=8
示例 2(返回多值:和與差):
function calculate(a, b)local sum = a + blocal diff = a - breturn sum, diff -- 返回兩個值
ends, d = calculate(10, 4)
print("和:" .. s .. ",差:" .. d) -- 輸出:和:14,差:6
匿名函數(進階)
匿名函數無函數名,通常作為參數傳遞給其他函數(如表遍歷、事件回調),示例(用匿名函數遍歷表):
arr = {1, 2, 3, 4}
-- table.foreach遍歷表,第二個參數為匿名函數
table.foreach(arr, function(index, value)print("索引" .. index .. ":" .. value \* 2) -- 值乘以2后輸出
end)
輸出:
索引1:2
索引2:4
索引3:6
索引4:8
5?? 實戰小案例:簡易計算器
結合前面所學語法,實現支持 “加、減、乘、除” 的計算器,包含異常處理(除數為 0、不支持的運算符),鞏固核心知識點。
計算器代碼實現
-- 定義計算器函數
function calculator(num1, num2, op)local resultif op == "+" thenresult = num1 + num2elseif op == "-" thenresult = num1 - num2elseif op == "*" thenresult = num1 * num2elseif op == "/" then-- 處理除數為0的情況if num2 == 0 thenreturn "錯誤:除數不能為0"endresult = num1 / num2elsereturn "錯誤:不支持的運算符(僅支持+、-、*、/)"endreturn "計算結果:" .. num1 .. op .. num2 .. "=" .. result
end-- 測試計算器
print(calculator(10, 5, "+")) -- 輸出:計算結果:10+5=15
print(calculator(20, 3, "-")) -- 輸出:計算結果:20-3=17
print(calculator(6, 7, "*")) -- 輸出:計算結果:6*7=42
print(calculator(10, 0, "/")) -- 輸出:錯誤:除數不能為0
print(calculator(8, 2, "^")) -- 輸出:錯誤:不支持的運算符(僅支持+、-、*、/)
6?? 學習資源推薦
官方文檔:Lua 5.1 參考手冊(最權威的資料,建議常備);
書籍:《Lua 程序設計(第 4 版)》(Lua 創始人編寫,適合深入學習);
在線課程:Bilibili 搜索 “Lua 入門”,有大量免費視頻教程,適合視覺學習者。
Lua Demo