模块与包
PACKAGE模块机制:require 路径、缓存、预载 | 本页 7 个接口。登录全站学员账号后:给函数打 ✓ 记录学习进度、写私人备注。
package.cpath
📖 用途
require 搜索 C 扩展模块(.dll/.so)的路径模板串。
📥 参数
无参数
📤 返回值
路径模板串(string)
💻 用法案例
print(package.cpath)
package.loaded
📖 用途
记录已加载模块的表:require 先查这里,命中直接返回(这就是“模块只加载一次”的实现)。强行置 nil 可强制重载。
📥 参数
无参数
📤 返回值
模块缓存表
💻 用法案例
print(package.loaded.string ~= nil) --> true package.loaded.MyLib = nil -- 下次 require 重新加载
package.loaders
📖 用途
require 的查找器列表(5.1 叫 loaders,5.2+ 改名 searchers):依次尝试,找到就加载。
📥 参数
无参数
📤 返回值
查找器数组
💻 用法案例
for i, loader in ipairs(package.loaders) do print(i, loader) end
package.loadlib (libname, funcname)
📖 用途
加载 C 库并取其中的函数(底层接口,一般用 require 即可)。
📥 参数
| 参数 | 说明 |
|---|---|
| libname | 动态库完整路径 |
| funcname | 导出的打开函数名(如 luaopen_xxx) |
📤 返回值
函数(失败 nil)
💻 用法案例
-- local open = package.loadlib('./x.dll', 'luaopen_x')
package.path
📖 用途
require 搜索 Lua 脚本模块的路径模板串,; 分隔,? 代表模块名。
📥 参数
无参数
📤 返回值
路径模板串(string)
💻 用法案例
print(package.path) -- 形如 .\?.lua;C:\lua\?.lua
package.preload
📖 用途
预登记模块加载函数的表:preload[名字] = 函数 后,require 该名字时直接调用此函数获得模块(不用找文件)。适合把多个模块打进一个文件。
📥 参数
无参数
📤 返回值
预载表
💻 用法案例
package.preload['hello'] = function() return {hi = function() print('hi') end} end
require('hello').hi()
package.seeall (module)
📖 用途
给模块表设元表使其能访问 _G(解决 module() 旧模块里访问不到全局的问题)。配合 module() 使用,新写法不需要。
📥 参数
| 参数 | 说明 |
|---|---|
| module | 模块表 |
📤 返回值
无
💻 用法案例
-- module('M', package.seeall) -- 旧式模块声明时用Lua 接口说明书 · 996引擎教学资料 · chuan2.cn · 共 136 个接口