🌙 Lua
概述:Lua 是一种轻量级、高效的脚本语言,于 1993 年在巴西里约热内卢天主教大学开发。Lua 以"小巧但强大"著称,是游戏开发中最流行的嵌入式脚本语言,同时也广泛应用于 Nginx、Redis 等系统中。
概述
Lua 属于 脚本 & 运维语言 分类。Lua 的名字在葡萄牙语中意为"月亮",其设计理念是提供一个小巧的核心,通过机制而非策略来扩展功能。
语言特点
- 极度轻量:完整解释器仅约 280KB,可轻松嵌入任何应用
- 高性能:LuaJIT 是最快的脚本语言实现之一
- 表是一切:Table 是 Lua 唯一的数据结构,可用于实现数组、字典、对象等
- 协程原生支持:coroutine 提供非对称协程
- 简洁语法:语言规范仅约 60 页,学习曲线平缓
Hello World
lua
print("Hello, World!")基础语法
变量与数据类型
lua
-- Lua 是动态类型语言
local age = 25
local name = "Lua"
local price = 99.99
local isActive = true
local nothing = nil -- Lua 的空值
-- 字符串连接
local greeting = "Hello, " .. name .. "!"
-- 多行字符串
local desc = [[
这是一段
多行字符串
]]表(Table)
lua
-- 数组(索引从 1 开始!)
local fruits = {"Apple", "Banana", "Cherry"}
print(fruits[1]) -- Apple
-- 字典
local person = {
name = "Alice",
age = 30,
greet = function(self)
print("Hi, I'm " .. self.name)
end
}
print(person.name)
person:greet()
-- 遍历
for key, value in pairs(person) do
print(key, value)
end
for i, v in ipairs(fruits) do
print(i, v)
end控制流
lua
-- if-elseif-else
if age >= 18 then
print("成年人")
elseif age >= 12 then
print("青少年")
else
print("儿童")
end
-- for 循环
for i = 1, 10 do
print(i)
end
for i = 1, 10, 2 do -- 步长为 2
print(i)
end
-- while 循环
local count = 0
while count < 10 do
count = count + 1
end
-- repeat-until(类似 do-while)
repeat
count = count - 1
until count == 0函数
lua
-- 函数定义
local function add(a, b)
return a + b
end
-- 多返回值
local function swap(a, b)
return b, a
end
local x, y = swap(1, 2)
-- 可变参数
local function sum(...)
local total = 0
for _, v in ipairs({...}) do
total = total + v
end
return total
end协程
lua
-- 创建协程
local co = coroutine.create(function()
for i = 1, 3 do
print("协程: " .. i)
coroutine.yield()
end
end)
coroutine.resume(co) -- 输出: 协程: 1
coroutine.resume(co) -- 输出: 协程: 2
coroutine.resume(co) -- 输出: 协程: 3面向对象
lua
-- 使用元表实现面向对象
local Animal = {}
Animal.__index = Animal
function Animal.new(name)
local instance = setmetatable({}, Animal)
instance.name = name
return instance
end
function Animal:speak()
print(self.name .. " makes a sound")
end
local Dog = setmetatable({}, {__index = Animal})
Dog.__index = Dog
function Dog.new(name, breed)
local instance = Animal.new(name)
setmetatable(instance, Dog)
instance.breed = breed
return instance
end
function Dog:speak()
print(self.name .. " says: Woof!")
end应用领域
- 游戏开发:Roblox、Love2D 游戏脚本
- Nginx:OpenResty (ngx_lua) 高性能 Web 服务
- Redis:嵌入式脚本实现原子操作
- Neovim:编辑器插件和配置(Lua 取代 VimScript)
- 物联网:嵌入式设备脚本引擎
- 桌面应用:Adobe Lightroom 插件
开发环境搭建
- 安装 Lua:
sudo apt install lua5.4或从 lua.org 下载 - 安装 LuaJIT:
sudo apt install luajit - 包管理器:LuaRocks (
luarocks install <package>) - 编辑器:VS Code + Lua 扩展、NeoVim
学习路线
- 入门阶段:基本语法 → 表和函数 → 控制流
- 进阶阶段:元表和元方法 → 协程 → 模块系统
- 实战阶段:游戏脚本 → Neovim 插件 → OpenResty Web 开发
- 高级阶段:C API 绑定 → LuaJIT FFI → 性能优化