Skip to content

🌙 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 插件

开发环境搭建

  1. 安装 Lua:sudo apt install lua5.4 或从 lua.org 下载
  2. 安装 LuaJIT:sudo apt install luajit
  3. 包管理器:LuaRocks (luarocks install <package>)
  4. 编辑器:VS Code + Lua 扩展、NeoVim

学习路线

  1. 入门阶段:基本语法 → 表和函数 → 控制流
  2. 进阶阶段:元表和元方法 → 协程 → 模块系统
  3. 实战阶段:游戏脚本 → Neovim 插件 → OpenResty Web 开发
  4. 高级阶段:C API 绑定 → LuaJIT FFI → 性能优化

返回首页 | 查看所有语言

编程语言技术文档