【lua】Lua 入门教程:从环境搭建到基础编程
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