当前位置: 首页 > news >正文

【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=10b="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布尔值,仅truefalseisOk = true
number数值(整数 / 浮点数,不区分)num1 = 20num2 = 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]=10arr[2]=20,打印arr[1]输出10
  • 字典(键值对):person = {name = "Tom", age = 18},通过person.nameperson["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

http://www.dtcms.com/a/356978.html

相关文章:

  • Java深拷贝与浅拷贝核心解析
  • C primer plus (第六版)第十一章 编程练习第1,2,3,4题
  • typescript postgres@3.x jsonb数据插入绕过类型检测错误问题
  • Linux驱动学习-spi接口
  • 手写一个Spring框架
  • 【树论】树上启发式合并
  • ansible的playbook练习题
  • 短剧小程序系统开发:助力影视行业数字化转型
  • 算法---字符串
  • Speculation Rules API
  • PDF转图片工具实现
  • 天气查询系统
  • 2025_WSL2_Ubuntu20.04_C++20_concept 环境配置
  • el-select多选下拉框出现了e611
  • MySQL 中ORDER BY排序规则
  • 物联网平台中的Swagger(二)安全认证与生产实践
  • Socket编程核心API与结构解析
  • 【C++】掌握类模板:多参数实战技巧
  • 构筑沉浸式3D世界:渲染、资源与体验的协同之道
  • 云计算学习笔记——逻辑卷管理、进程管理、用户提权RAID篇
  • N32G43x Flash 驱动移植与封装实践
  • DBeaver 的 PostgreSQL 驱动包默认存储位置
  • 序列化和反序列的学习
  • 移动社交时代电商流量获取新路径:基于社群与开源AI智能名片链动2+1模式S2B2C商城小程序的探索
  • 【基础-单选】关于Button组件,下面哪个样式是胶囊型按钮
  • 大模型之RAG, 检索增强生成
  • 【若依】RuoYi-Vue-springboot3分离版
  • RS485、RS232、RS422协议
  • 浔川代码编辑器v2.1.0公测版上线时间公告
  • 基于FPGA的DDR3读写实验学习