| 变量 | 说明 |
|---|---|
| package.config) | 包的配置字符串 |
| package.cpath) | require 搜索 C 加载器的路径 |
| package.path) | require 搜索 Lua 加载器的路径 |
| package.loaded) | 已经加载的模块列表 |
| package.preload) | 用于存储特定模块的加载器的表 |
| package.searchers) | 用于控制 require 如何查找模块的表 |
| 函数 | 说明 |
|---|---|
| package.loadlib) | 导入 C 库中的函数 |
| package.searchpath) | 查找名称 |
package.config 是编译时决定的包模块配置字符串:
第一行是目录分隔符;Windows 系统默认为 "\",其它系统默认为 "/"
第二行是路径模板分隔符;默认为 ";"
第三行是路径模板替换字符;默认为 "?"
第四行是在 Windows 系统上查找模块时替换为可执行文件所在目录的字符;默认为 "!"
第五行是 luaopen_ 函数名末尾被忽略部分的开始字符;默认为 "-",例如 luaopen_MyLib-2.0
package.cpath 是 require 函数搜索 C 加载器使用的路径列表。
示例值:
/usr/local/lib/lua/5.4/?.so;/usr/local/lib/lua/5.4/loadall.so;./?.so
package.loaded 是已经加载的模块列表。
示例值:
os table: 0x1d320
package table: 0x1cbc8
io table: 0x1d558
coroutine table: 0x1d130
debug table: 0x1ca10
table table: 0x1d388
utf8 table: 0x1c858
math table: 0x1e878
string table: 0x1e198
_G table: 0x1bb98
package.path 是 require 函数搜索 Lua 加载器使用的路径列表。
示例值:
/usr/local/share/lua/5.4/?.lua;/usr/local/share/lua/5.4/?/init.lua;/usr/local/lib/lua/5.4/?.lua;/usr/local/lib/lua/5.4/?/init.lua;./?.lua;./?/init.lua
package.preload 是构建时配置的模块加载器列表,默认是空的。
模块的查找器函数列表,默认为:
第一个查找器尝试从 package.preload 中查找加载器 package.preload[modname]
第二个查找器尝试从 package.path 中查找 Lua 库形式的加载器
第三个查找器尝试从 package.cpath 中查找 C 库形式的加载器
require("mylibs") 尝试加载 mylibs.so 中的 luaopen_mylibs 函数
第四个查找器尝试使用一体化加载器(多个子模块集成在一个 C 库中):从 package.cpath 中查找 C 库形式的加载器
require("mylibs.xx") 尝试加载 mylibs.so 中的 luaopen_mylibs_xx 函数
require("mylibs.yy") 尝试加载 mylibs.so 中的 luaopen_mylibs_yy 函数
require("mylibs.zz") 尝试加载 mylibs.so 中的 luaopen_mylibs_zz 函数
package.loadlib (libname, funcname)
!subtitle:说明
动态链接 C 库 libname,查找函数 funcname 并将其作为 lua_CFunction 返回。
如果 funcname 是 "*",则仅动态链接 C 库 libname,从而使器导出的符号可以被使用。
typedef int (*lua_CFunction) (lua_State *L);
!subtitle:参数
libname - 要链接的动态库名称(完整文件名,不可省略扩展名)
funcname - 要加载的函数名(完整符号,不可省略 lua_open 前缀)
!subtitle:返回值
返回加载的 C 函数
package.searchpath (name, path [, sep [, rep]])
!subtitle:说明
在路径 path 中查找名称 name。
路径 path 是一个字符串,包含一系列以分号(;,受 package.config 影响)分隔的路径模板,用于生成路径:
路径模板中的问号(?,受 package.config 影响)会被替换为 name
name 中的 sep(默认为 .)会被替换为 rep(默认为系统路径分隔符)
然后尝试以读模式打开生成的路径。
例如 path 为 "./?.lua;./?.lc;/usr/local/?/init.lua",name 为 module.sub,将依次尝试打开:
"./module/sub.lua"
"./module/sub.lc"
"/usr/local/module/sub/init.lua"。
!subtitle:参数
name - 要查找的名称
path - 查找的路径模板
sep - 名称 name 中的分隔符,生成路径时会被替换为 rep;默认为 "."
rep - 生成路径时替换 sep 的字符;Windows 系统默认为 "\",其它系统默认为 "/"
!subtitle:返回值
成功时返回第一个成功的文件路径
失败时返回 nil 和错误消息
require - 加载模块