Skip to content Skip to footer

10分钟学会 Lua 编程

Lua是个超级轻量的编程语言,专门用来嵌入到其他程序里面用。很多游戏比如《魔兽世界》、Roblox都在用Lua,还有很多软件也拿它来做配置脚本。

1. 编写第一个 Lua 程序

从最简单的开始。新建一个叫hello.lua的文件,里面写:

print("Hello, World!")

保存之后,在命令行里运行:

lua hello.lua

你就会看到:

Hello, World!

就这么简单!print()就是用来在屏幕上显示文字的。

2. 基本语法规则

Lua 的语法比较简单:

-- 这是单行注释,就像聊天时候的备注

print("你好世界!")

--[[

这是多行注释

想写多少行都行

]]

记住这几个要点:

注释:单行用--,多行用--[[ ]]

语句:一行写一个命令,不用加分号

大小写:Lua分大小写,name和Name是两码事

空格:空格和换行随便用,不影响代码

3. 变量和数据类型

在 Lua 里面不用事先告诉它变量是什么类型:

-- 直接赋值就行

名字 = "Lua"

年龄 = 25

很牛逼 = true

圆周率 = 3.14159

-- 还能一次性赋多个值

x, y, z = 10, 20, 30

-- 空值用nil表示

空变量 = nil

print("名字:", 名字)

print("年龄:", 年龄)

print("牛逼不:", 很牛逼)

Lua有这些数据类型:

nil:啥也没有

boolean:就是true或false

number:数字,不分整数小数

string:字符串,就是文字

table:这是Lua的大杀器,什么数组、字典都能装

function:函数,一等公民

userdata:给C语言用的

thread:协程,高级玩法

4. 字符串操作

-- 字符串几种写法

str1 = "你好"

str2 = '世界'

str3 = [[多行

字符串真方便]]

-- 字符串拼接用..

问候语 = str1 .. " " .. str2

print(问候语) -- 输出: 你好 世界

-- 字符串长度用#

长度 = #"你好"

print(长度) -- 输出: 2

-- 字符串方法

文本 = "hello world"

大写 = 文本:upper()

小写 = 文本:lower()

截取 = 文本:sub(1, 5)

print(大写) -- 输出: HELLO WORLD

print(截取) -- 输出: hello

5. 表(Table)- Lua的万能容器

表是 Lua 最牛逼的东西,什么都能装,简称装逼!!!:

-- 当数组用(注意从1开始数)

水果 = {"苹果", "香蕉", "樱桃"}

print(水果[1]) -- 输出: 苹果

print(水果[2]) -- 输出: 香蕉

-- 当字典用

人物 = {

名字 = "小明",

年龄 = 30,

城市 = "北京"

}

print(人物.名字) -- 输出: 小明

print(人物["年龄"]) -- 输出: 30

-- 混合着用也没问题

混合表 = {

"苹果",

"香蕉",

颜色 = "红色",

数量 = 5

}

-- 表操作

水果 = {"苹果", "香蕉"}

table.insert(水果, "樱桃") -- 往最后加

table.insert(水果, 2, "橙子") -- 插到第二个位置

print(table.concat(水果, ", ")) -- 输出: 苹果, 橙子, 香蕉, 樱桃

6. 流程控制

-- if语句

年龄 = 18

if 年龄 >= 18 then

print("成年人了")

elseif 年龄 >= 13 then

print("青少年")

else

print("小朋友")

end

-- while循环

计数器 = 1

while 计数器 <= 5 do

print("计数:", 计数器)

计数器 = 计数器 + 1

end

-- for循环(数字的)

for i = 1, 5 do

print("数字:", i)

end

-- for循环(带步长)

for i = 10, 1, -2 do

print("倒着数:", i)

end

-- for循环(遍历表)

水果 = {"苹果", "香蕉", "樱桃"}

for 序号, 水果名 in ipairs(水果) do

print(序号, 水果名)

end

人物 = {名字 = "小明", 年龄 = 30}

for 键, 值 in pairs(人物) do

print(键, 值)

end

7. 函数

-- 基本函数

function 打招呼(名字)

return "你好, " .. 名字 .. "!"

end

消息 = 打招呼("小红")

print(消息) -- 输出: 你好, 小红!

-- 函数能返回多个值

function 计算(a, b)

return a + b, a - b, a * b, a / b

end

和, 差, 积, 商 = 计算(10, 5)

print("和:", 和) -- 输出: 和: 15

print("差:", 差) -- 输出: 差: 5

-- 匿名函数(也叫lambda)

乘 = function(x, y)

return x * y

end

结果 = 乘(4, 5)

print(结果) -- 输出: 20

-- 函数当参数传

function 执行操作(x, y, 操作)

return 操作(x, y)

end

结果 = 执行操作(6, 7, 乘)

print(结果) -- 输出: 42

8. 模块化

把代码分开写更清爽。先建个数学工具.lua:

-- 数学工具.lua

local 数学工具 = {}

function 数学工具.加(a, b)

return a + b

end

function 数学工具.乘(a, b)

return a * b

end

return 数学工具

然后在主文件里用:

-- 主程序.lua

local 数学工具 = require("数学工具")

结果 = 数学工具.加(10, 5)

print("加法结果:", 结果) -- 输出: 加法结果: 15

结果 = 数学工具.乘(4, 6)

print("乘法结果:", 结果) -- 输出: 乘法结果: 24

9. 错误处理

-- 用pcall抓错误

function 危险操作()

error("完犊子了!")

end

-- pcall能保护调用

成功, 结果 = pcall(危险操作)

if 成功 then

print("搞定了:", 结果)

else

print("翻车了:", 结果)

end

-- 自己抛错误

function 除(a, b)

if b == 0 then

error("别除以零啊兄弟")

end

return a / b

end

成功, 结果 = pcall(除, 10, 0)

if not 成功 then

print("出错啦:", 结果)

end

10. 实战例子

-- 简易计算器

function 计算器()

print("🐮 简易计算器")

print("1. 加")

print("2. 减")

print("3. 乘")

print("4. 除")

选择 = tonumber(io.read())

print("输第一个数:")

数1 = tonumber(io.read())

print("输第二个数:")

数2 = tonumber(io.read())

if 选择 == 1 then

结果 = 数1 + 数2

print("结果:", 结果)

elseif 选择 == 2 then

结果 = 数1 - 数2

print("结果:", 结果)

elseif 选择 == 3 then

结果 = 数1 * 数2

print("结果:", 结果)

elseif 选择 == 4 then

if 数2 ~= 0 then

结果 = 数1 / 数2

print("结果:", 结果)

else

print("❌ 别除以零")

end

else

print("🤔 选错了")

end

end

-- 想用就取消注释

-- 计算器()

-- 文件操作

function 读文件(文件名)

local 文件 = io.open(文件名, "r")

if not 文件 then

return nil, "打不开文件"

end

local 内容 = 文件:read("*a")

文件:close()

return 内容

end

内容, 错误 = 读文件("例子.txt")

if 内容 then

print("文件内容:", 内容)

else

print("出错:", 错误)

end

总结

Lua这语言真心好用!特别适合:

🎮 做游戏脚本(很多游戏都用它)

🔧 嵌入式开发(因为特别轻量)

⚙️ 配置文件和自动化脚本

🚀 需要高性能的场景(配合LuaJIT)

Lua的牛逼之处:

轻如鸿毛:占用空间超级小

快如闪电:LuaJIT编译后飞快

随心所欲:动态类型+万能table

到处能跑:从手机到服务器都能用

好嵌入:和C/C++配合默契

想继续深入?可以玩玩:

Lua的标准库函数

协程(做并发编程)

元表和元方法(实现面向对象)

Lua和C的交互

Love2D游戏框架

Lua上手快,功能强,赶紧用起来吧!🚀