你现在能做到什么
读完这 25 篇你能:
- 写 Lua 5.4 标准代码 + 知道 LuaJIT 差异
- 用 metatable 写 class、继承、运算符重载
- 模块化代码、错误处理、协程
- 在 5 大典型嵌入场景里上手(Roblox / Love2D / Neovim / Redis / OpenResty)
- 把 Lua 嵌入 C/C++ 当配置/脚本层
接下来去哪
方向 1:游戏开发
- Roblox / Luau:create.roblox.com、devforum.roblox.com、Roblox 类型系统
- Love2D:Awesome LÖVE 列表、Sheepolution 教程
- Defold:defold.com 商用 2D 游戏框架,Lua 脚本
- GameDev 实战:等本站
gamedev/系列
方向 2:高性能 Web
- OpenResty 深入:官方文档 + agentzh tutorial
- Kong API Gateway:基于 OpenResty 的成熟产品,源码值得读
- Tengine:阿里 fork 的 Nginx + Lua
- Lua-resty 库生态:awesome-resty
方向 3:编辑器 / 工具链
- Neovim 配置精进:LazyVim 源码、折腾系列
- lua-language-server:自家代码就用 Lua + Lua 写——是阅读高质量 Lua 项目的好入口
- 写自己的 Neovim 插件:plugin development guide
方向 4:嵌入式 / IoT
- NodeMCU:ESP8266 / ESP32 上跑 Lua
- eLua:32 位 MCU 的 Lua 移植
- Tarantool:高性能内存数据库,Lua 写存储过程
方向 5:方言与变种
Luau
Roblox 出品,类型注解 + 严格运行时。即使不做 Roblox 也值得了解——它是"现代 Lua"的好实验场。可独立用(不依赖 Roblox):
brew install luau
luau script.luau
Fennel
(fn greet [name]
(print (.. "Hello, " name)))
(greet "world")
Lisp 语法 → 编译成 Lua。要 Lisp 表达力 + Lua 生态时考虑。fennel-lang.org
Teal
local function add(a: integer, b: integer): integer
return a + b
end
给 Lua 加静态类型检查的纯类型层。github.com/teal-language/tl
MoonScript / YueScript
CoffeeScript 风格 → Lua。语法更紧凑但更小众。
方向 6:经典书 + 资源
- 《Programming in Lua》(PiL) by Roberto Ierusalimschy(语言作者)—— 第 4 版覆盖 Lua 5.3,第 5 版(写作中)覆盖 5.4。Lua 圣经。
- 《Lua 程序设计》 中文版(第 4 版已译)
- Lua Reference Manual:lua.org/manual/5.4——简短精炼
- lua-users.org wiki:老但仍有很多惯用法 / 模式
- GitHub awesome-lua:github.com/LewisJEllis/awesome-lua
实用模式回顾
读到这里,把这几个常用模式刻到脑里:
-- 模块
local M = {}
local PRIVATE = "..."
function M.foo() end
return M
-- 类
local Class = {}
Class.__index = Class
function Class.new(...) return setmetatable({...}, Class) end
function Class:method() end
-- 默认值
local x = arg or DEFAULT
-- 安全访问
local v = obj and obj.field and obj.field.sub
-- 命名参数
M.create{ name = "x", age = 30 }
-- 字符串构建
local parts = {}
for i = 1, n do parts[i] = tostring(i) end
local s = table.concat(parts, ",")
-- pcall
local ok, err = pcall(risky_function)
if not ok then handle(err) end
思维转变
从其他语言来的人最容易卡的几点:
- 索引从 1:忍受它
- table 万能:不要找 list/dict/set——都用 table
- 默认全局:永远 local
- 0 是真值:判 false 用
== false或not - 没 class / try-catch:用 metatable + pcall
接受这些"特立独行"后,Lua 反而显出极简的美——核心几乎能在一页纸讲完,剩下都是 table 和 metatable 的组合。
🎉 Lua 系列完结。要扩展某一篇 / 加新主题,欢迎反馈。