Lua #

什么是 Lua? #

Lua 是一种轻量级、高效、可嵌入的脚本语言,由巴西里约热内卢天主教大学(PUC-Rio)于1993年开发。Lua 的名字在葡萄牙语中是"月亮"的意思。

Lua 的特点 #

  • 轻量级:Lua 的核心非常小,完整解释器仅约200KB
  • 高效:Lua 是最快的脚本语言之一
  • 可嵌入:设计之初就考虑了嵌入到其他程序中
  • 简单:语法简洁,概念清晰,易于学习
  • 可扩展:通过C语言可以轻松扩展功能

Lua 的应用领域 #

领域 应用案例
游戏开发 魔兽世界、愤怒的小鸟、Roblox
Web开发 OpenResty、Nginx + Lua
嵌入式 物联网设备、路由器配置
安全工具 Nmap、Wireshark、Snort
图形处理 Adobe Lightroom、VLC

文档结构 #

本指南按以下结构组织,适合初学者按顺序学习:

1. 基础入门 #

主题 描述 文档链接
Lua简介 Lua的发展历史、特点、应用领域 lua-intro.md
安装与运行 Windows/Mac/Linux安装,环境配置 lua-install.md
第一个Lua程序 Hello World,交互式解释器 hello-world.md
基础语法 注释、标识符、关键字、代码规范 lua-syntax.md

2. 数据类型 #

主题 描述 文档链接
变量与作用域 全局变量、局部变量、作用域规则 variables.md
基本数据类型 nil、boolean、number、string、function、thread、userdata basic-types.md
字符串 字符串创建、操作、模式匹配 strings.md
运算符 算术、关系、逻辑、连接运算符 operators.md

3. 控制流 #

主题 描述 文档链接
条件语句 if、if-else、if-elseif-else conditionals.md
循环语句 while、repeat-until、for、泛型for loops.md

4. 函数 #

主题 描述 文档链接
函数基础 函数定义、参数、返回值、多返回值 function-basics.md
闭包与高阶函数 闭包原理、高阶函数、函数作为值 closures.md
可变参数 …语法、select函数、可变参数处理 variadic.md

5. 表(Table) #

主题 描述 文档链接
表基础 表的创建、访问、遍历 table-basics.md
表作为数组 数组操作、插入删除、排序 table-array.md
表作为字典 键值对操作、常用模式 table-dictionary.md

6. 模块与包 #

主题 描述 文档链接
模块基础 模块创建、require函数、模块加载机制 module-basics.md
包管理 LuaRocks包管理器、常用库 package-management.md

7. 输入输出 #

主题 描述 文档链接
文件操作 文件读写、IO库使用 file-operations.md

8. 高级特性 #

主题 描述 文档链接
元表与元方法 __index、__newindex、运算符重载 metatables.md
面向对象编程 类、继承、多态的实现 oop.md
协程 coroutine库、协程调度、生产者消费者模式 coroutines.md

9. 框架与应用 #

主题 描述 文档链接
OpenResty Nginx + Lua 高性能Web平台 openresty.md
LÖVE游戏引擎 2D游戏开发框架 love2d.md
Lua应用场景 游戏开发、Web开发、嵌入式等 applications.md

学习建议 #

对于初学者 #

  1. 按照文档顺序学习,先掌握基础语法
  2. 多动手实践,每学一个概念都要写代码验证
  3. 理解 Lua 的核心概念:表(Table)是一切的基础
  4. 不要急于学习高级特性,基础扎实最重要

对于有编程经验的开发者 #

  1. 快速浏览基础部分,重点关注 Lua 的独特之处
  2. 深入学习表和元表,这是 Lua 的精髓
  3. 了解 Lua 的嵌入特性,思考如何在自己的项目中使用
  4. 学习 Lua 的 C API,实现高性能扩展

快速开始 #

lua
-- 你的第一个 Lua 程序
print("Hello, Lua!")

-- 变量定义
local name = "Lua"
local version = 5.4

-- 函数定义
function greet(who)
    return "Hello, " .. who .. "!"
end

-- 调用函数
print(greet("World"))

-- 表的使用
local person = {
    name = "张三",
    age = 25,
    greet = function(self)
        print("你好,我是" .. self.name)
    end
}

person:greet()

常见问题 #

Lua 和其他脚本语言有什么区别? #

Lua 与 Python、JavaScript 等脚本语言相比,最大的特点是:

  • 更轻量级,适合嵌入
  • 语法更简洁,概念更少
  • 表(Table)是唯一的数据结构
  • 没有内置的类系统,但可以通过元表实现

Lua 适合什么场景? #

  • 游戏开发:作为游戏脚本语言
  • Web开发:OpenResty 高性能Web服务
  • 嵌入式:物联网设备脚本
  • 配置文件:复杂配置的描述
  • 扩展脚本:为应用程序提供脚本能力

学习 Lua 需要什么基础? #

Lua 非常适合作为第一门编程语言学习。如果你有其他编程语言的经验,学习 Lua 会更加轻松。本指南从零开始,适合所有水平的读者。

最后更新:2026-03-27