Lua 模块的完整入门指南

一、什么是模块?

从本质上讲,Lua 模块就是存储在自己文件中的一段可复用代码。

二、创建你的第一个模块

黄金法则:模块就是一个返回(return)表的 Lua 文件。

让我们创建一个简单的数学工具模块。

  1. 创建一个名为 mymath.lua 的新文件。
  2. 在其中放入以下代码:
lua 复制代码
-- 文件:mymath.lua
-- 1. 创建一个局部表来保存我们模块的函数和数据。
--    使用 'M' 代表 'module' 是一个常见的约定。
local M = {}

-- 2. 定义函数并将它们添加到我们的表中。
--    这些函数现在是我们模块表的"方法"。
function M.add(a, b)
    return a + b
end

function M.subtract(a, b)
    return a - b
end

function M.multiply(a, b)
    return a * b
end

function M.divide(a, b)
    if b == 0 then
        return nil, "除数不能为零"
    end
    return a / b
end

-- 模块中可用的常量
M.PI = 3.14159
M.VERSION = "1.0.0"

-- 3. 最重要的步骤:在文件末尾返回这个表。
--    这使得其中的所有函数和数据对其他脚本可用。
return M

就是这样!你已经创建了一个模块。注意所有东西都整洁地保存在 M 表内。

三、使用 require 来使用你的模块

现在,我们使用内置的 require 函数在另一个文件中使用我们这个 mymath

  1. 同一目录 中创建另一个名为 main.lua 的文件。
  2. 在其中放入以下代码:
lua 复制代码
-- 文件:main.lua

-- 使用 'require' 来加载我们的模块。
-- 注意:你不需要包含 '.lua' 扩展名。
-- 'require' 返回 mymath.lua 返回的表。
local mymath = require("mymath")

-- 现在我们可以使用模块中的函数了!
local sum = mymath.add(10, 5)
print("和:", sum) -- 输出: 和: 15

local difference = mymath.subtract(10, 5)
print("差:", difference) -- 输出: 差: 5

local product = mymath.multiply(10, 5)
print("积:", product) -- 输出: 积: 50

local quotient, err = mymath.divide(10, 0)
if quotient then
    print("商:", quotient)
else
    print("错误:", err) -- 输出: 错误: 除数不能为零
end

-- 我们也可以访问模块中的数据。
print("圆周率约等于:", mymath.PI) -- 输出: 圆周率约等于: 3.14159
print("模块版本:", mymath.VERSION) -- 输出: 模块版本: 1.0.0

require 的工作原理:

  • 它搜索指定的模块文件(例如,mymath.lua)。
  • 它运行该文件内的代码只执行一次
  • 它存储(缓存)该模块文件 return 的值。
  • 如果你在其他地方再次 require 同一个模块,Lua 不会重新运行文件;它会立即给你缓存的返回值。这既智能又高效!

结语

点个赞,关注我获取更多实用 Lua 技术干货!如果觉得有用,记得收藏本文!

相关推荐
nvd115 分钟前
企业级 LLM 实战:在受限环境中基于 Copilot API 构建 ReAct MCP Agent
前端·copilot
Dragon Wu14 分钟前
TailWindCss cva+cn管理样式
前端·css
烤麻辣烫19 分钟前
Web开发概述
前端·javascript·css·vue.js·html
Front思29 分钟前
Vue3仿美团实现骑手路线规划
开发语言·前端·javascript
徐同保32 分钟前
Nano Banana AI 绘画创作前端代码(使用claude code编写)
前端
Ulyanov32 分钟前
PyVista与Tkinter桌面级3D可视化应用实战
开发语言·前端·python·3d·信息可视化·tkinter·gui开发
计算机程序设计小李同学32 分钟前
基于Web和Android的漫画阅读平台
java·前端·vue.js·spring boot·后端·uniapp
lkbhua莱克瓦2435 分钟前
HTML与CSS核心概念详解
前端·笔记·html·javaweb
沛沛老爹36 分钟前
从Web到AI:Agent Skills CI/CD流水线集成实战指南
java·前端·人工智能·ci/cd·架构·llama·rag
GISer_Jing44 分钟前
1.17-1.23日博客之星投票,每日可投
前端·人工智能·arcgis