Skip to content

Lua 快速指南

Lua 是一种强大、高效、轻量且可嵌入的脚本语言。它支持过程式编程、面向对象编程(基于原型)、函数式编程、数据驱动编程和数据描述。Lua 由 Roberto Ierusalimschy、Luiz Henrique de Figueiredo 和 Waldemar Celes 于 1993 年在巴西的一所大学构思,旨在轻松集成到用 C 和其他语言编写的应用程序中。

这种集成能力是 Lua 设计的基石。Lua 的目标不是取代 C,而是补充 C,在 C 不太适合的领域发挥优势:提供更高层次的抽象、动态类型、自动内存管理以及强大的字符串和表操作能力。这使得 Lua 非常适合用于配置、脚本编写和快速原型开发。

Lua 因其几个独特的特性而脱颖而出:

  • **轻量级:**Lua 的核心非常小巧,适用于资源受限的设备并能快速加载。
  • **可嵌入:**从头设计,旨在通过简单的 C API 轻松集成到宿主应用程序中。
  • **快速:**Lua 以其性能著称,得益于其高效的字节码虚拟机,常被视为最快的脚本语言之一。
  • **可移植:**用 ANSI C 编写,Lua 几乎可以在任何拥有 C 编译器的平台上编译和运行。
  • **简洁:**Lua 的概念相对较少,语法清晰,易于学习。
  • **动态类型:**类型在运行时检查,变量没有固定的类型。
  • **自动内存管理:**使用垃圾回收(garbage collection)来管理内存,开发者无需手动分配和释放。
  • **可扩展:**Lua 的功能不仅可以通过 Lua 代码扩展,还可以通过 C 库扩展。
print("Hello World!")

Lua 实现为一个小型 C 库。Lua 发行版包含 Lua 解释器(一个允许你运行 Lua 脚本的小程序)和 Lua 编译器(将 Lua 源代码编译成字节码)。Lua 代码通常在由 Lua 虚拟机 (VM) 执行之前被编译为字节码。这个编译步骤很快,并且通常在运行时透明地发生。

解释器和 VM 具有高度可移植性,并针对速度和小型内存占用进行了优化。Lua 的设计优先考虑简洁性、效率和可移植性,这使其成为游戏开发(例如 Roblox、Defold、LÖVE)、嵌入式系统(例如固件)、应用程序脚本编写(例如 Neovim、Redis、Wireshark)和 Web 开发(例如 OpenResty)的热门选择。

学习 Lua 时,要着重理解其核心概念:表(tables)、作为一流值(first-class values)的函数、协程(coroutines)和元表(metatables)。这些是其强大功能的基石。掌握这些概念将使你成为一个更有效的程序员,能够利用 Lua 在各种应用程序中的灵活性。

实践应用和实验是关键。利用在线资源、官方 Lua 文档(强烈推荐)和社区论坛来加深你的理解。

  • **游戏开发:**LÖVE、Defold、Solar2D(前称 Corona SDK)等引擎以及 Roblox 等平台大量使用 Lua 或其变种 (Luau)。
  • **嵌入式系统:**其小巧的内存占用使其成为微控制器和 IoT 设备的理想选择。
  • **应用程序脚本编写与扩展:**用于 Neovim、Redis、Nginx (OpenResty)、Wireshark、Adobe Lightroom 等众多应用。
  • **Web 开发:**主要与 OpenResty 一起使用,OpenResty 是基于 Nginx 和 LuaJIT 的高性能 Web 平台。
  • **中间件和工具:**用于配置、自动化和插件系统。

在线尝试 Lua 在设置本地环境之前,你可以轻松地在线尝试 Lua。许多网站提供交互式 Lua 解释器,你可以在浏览器中直接执行代码片段。搜索“在线 Lua 解释器”或尝试 Replit、官方 Lua 演示页面 (lua.org/demo.html) 或其他编码平台。这是快速体验该语言的好方法。

在线尝试示例:

-- 这是一个注释
local message = "Hello from an online Lua interpreter!"
print(message)
local a = 10
local b = 20
print("The sum of " .. a .. " and " .. b .. " is " .. (a + b))

要在本地开发 Lua 应用程序,你需要:

  1. 一个文本编辑器或集成开发环境 (IDE)。
  2. Lua 解释器。
  3. 可选的 LuaRocks(Lua 包管理器)。

你可以在任何纯文本编辑器中编写 Lua 代码。然而,强烈建议使用支持 Lua 的编辑器或 IDE(语法高亮、代码补全、调试)。流行的选择包括:

  • **Visual Studio Code (VS Code):**通过 vscode-lua (by sumneko) 或 EmmyLua 等扩展提供出色的 Lua 支持。
  • **Neovim:**高度可配置,内置对 Lua 的 LSP 支持。
  • **Sublime Text:**有不错的 Lua 插件包可用。
  • **ZeroBrane Studio:**一款轻量级的专用 Lua IDE,具有调试功能。
  • **IntelliJ IDEA(带 Lua 插件):**功能强大的 IDE,对 Lua 支持良好。

Lua 源文件通常保存为 .lua 扩展名。

Lua 解释器执行 Lua 脚本。它还提供交互模式 (REPL - Read-Eval-Print Loop),用于逐行实验 Lua 代码。你还可以使用 luac(Lua 编译器)将 Lua 脚本预编译为字节码,以加快加载速度或检查语法错误,尽管解释器可以在运行时即时编译源代码。

  1. **官方二进制文件:**从官方 LuaBinaries 项目下载预编译的 Windows 二进制文件(通常通过搜索“LuaBinaries”或从 lua.org 链接找到)。选择最新的稳定版本(例如 Lua 5.4.x)。解压文件,并将包含 lua.exe 和 luac.exe 的目录添加到你的系统 PATH 环境变量中。
  2. **Scoop:**如果你使用 Scoop,可以使用 scoop install lua 安装 Lua。
  3. **Chocolatey:**如果你使用 Chocolatey,可以使用 choco install lua 安装 Lua。
  4. **LuaDist:**提供更全面的发行版,包含预构建的模块(请检查其当前状态和兼容性)。
  5. **WSL (Windows Subsystem for Linux):**使用 WSL Linux 发行版中的包管理器安装 Lua(参见 Linux 说明)。

一个较旧的选项 LuaForWindows 将 Lua 与 SciTE 和库捆绑在一起,但可能不是最新的 Lua 版本。使用 VS Code 和官方二进制文件/包管理器的现代设置通常是更推荐的方式。

大多数 Linux 发行版通过其包管理器提供 Lua。这是最简单的安装方法。打开终端并使用适用于你的发行版的相应命令(例如 Lua 5.4):

# For Debian/Ubuntu based systems
sudo apt update
sudo apt install lua5.4
# For Fedora
sudo dnf install lua
# For Arch Linux
sudo pacman -S lua

从源代码编译(用于最新版本或自定义构建): 从 lua.org/ftp/ 下载最新的 tarball(例如 lua-5.4.6.tar.gz)。

wget http://www.lua.org/ftp/lua-5.4.6.tar.gz
tar zxf lua-5.4.6.tar.gz
cd lua-5.4.6
make linux test # 或 'make generic test' 或 'make posix test'
sudo make install

要运行 Lua 脚本(例如 hello.lua):

-- hello.lua
print("Hello from Lua on Linux!")

然后在终端中运行:

lua hello.lua

输出:

Hello from Lua on Linux!

在 macOS 上安装 Lua 最简单的方法是使用 Homebrew:

brew install lua

从源代码编译(需要 Xcode Command Line Tools): 从 lua.org/ftp/ 下载最新的 tarball(例如 lua-5.4.6.tar.gz)。

curl -R -O http://www.lua.org/ftp/lua-5.4.6.tar.gz
tar zxf lua-5.4.6.tar.gz
cd lua-5.4.6
make macosx test
sudo make install

如果 make 失败,请确保已安装 Xcode Command Line Tools:xcode-select --install。

运行脚本与 Linux 上相同:

-- hello_mac.lua
print("Hello from Lua on macOS!")
lua hello_mac.lua

输出:

Hello from Lua on macOS!

LuaRocks 是 Lua 模块的包管理器,类似于 Node.js 的 npm 或 Python 的 pip。它允许你轻松安装和管理 Lua 库(称为“rocks”)。 如果你安装了 Lua 的开发包(例如 Debian/Ubuntu 上的 lua5.4-dev,通常包含 luarocks),许多系统会自动安装 LuaRocks。 否则,你可以单独安装它。请访问 luarocks.org 查看安装说明。

安装后,你可以像这样安装 Lua 模块: luarocks install <module_name>