课时 13 · 模块与包
课时 13 · 模块与包(Lua 进阶):掌握模块化开发方式。示例跑在 996 新三端引擎里,接口按本地官方文档逐个核对。
本课的代码跑在 996 引擎里,用到的是服务端接口(changeexp、 SetInt 这类),在线运行器里没有这些函数。 每个函数的签名都能在 文档检索 里按名字查到原文。
本课目标
- 掌握模块化开发方式。
知识讲解
模块是一个返回表的 .lua 文件,require 加载模块并缓存结果。package.path 指定模块搜索路径。模块内用 local 封装私有函数,只导出需要公开的接口。避免循环引用(A require B 且 B require A)。引擎脚本通常也按「公共库 / 功能模块 / 配置」分层组织。
示例:模块定义与使用
-- math_tools.lua
local M = {}
local function _private(x) return x * 2 end
function M.add(a, b) return a + b end
function M.double(a) return _private(a) end
return M
-- main.lua
local tools = require('math_tools')
print(tools.add(1, 2)) -- 3
print(tools.double(4)) -- 8
练习任务
- 把课时 5 的数学工具函数拆分为独立模块(求和、阶乘、斐波那契),在另一个文件中 require 并调用;再思考模块之间如何避免循环引用。
参考:验收要点
- 模块文件末尾必须有 return M;
- require 返回的是同一份模块表(缓存),状态跨文件共享;
- 循环引用的解法:抽公共依赖模块、延迟 require(函数内再加载)。
本篇依据
- 《996 新三端 Lua 开发教学技术手册》课时 13
参数与取值以你本机版本的官方帮助文档为准,不同版本之间有过调整。