#Lua 的 Package 模块
| 变量 | 说明 |
|---|---|
| package.config | 包的配置字符串 |
| package.cpath | require 搜索 C 加载器的路径 |
| package.path | require 搜索 Lua 加载器的路径 |
| package.loaded | 已经加载的模块列表 |
| package.preload | 用于存储特定模块的加载器的表 |
| package.searchers | 用于控制 require 如何查找模块的表 |
| 函数 | 说明 |
|---|---|
| package.loadlib | 导入 C 库中的函数 |
| package.searchpath | 查找名称 |
#package.config
package.config 是编译时决定的包模块配置字符串:
- 第一行是目录分隔符;Windows 系统默认为
"\",其它系统默认为"/" - 第二行是路径模板分隔符;默认为
";" - 第三行是路径模板替换字符;默认为
"?" - 第四行是在 Windows 系统上查找模块时替换为可执行文件所在目录的字符;默认为
"!" - 第五行是
luaopen_函数名末尾被忽略部分的开始字符;默认为"-",例如luaopen_MyLib-2.0
#package.cpath
package.cpath 是 require 函数搜索 C 加载器使用的路径列表。
示例值:
/usr/local/lib/lua/5.4/?.so;/usr/local/lib/lua/5.4/loadall.so;./?.so
#package.loaded
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
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.searchers
模块的查找器函数列表,默认为:
- 第一个查找器尝试从
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
package.loadlib (libname, funcname)
说明
动态链接 C 库 libname,查找函数 funcname 并将其作为 lua_CFunction 返回。
如果 funcname 是 "*",则仅动态链接 C 库 libname,从而使器导出的符号可以被使用。
typedef int (*lua_CFunction) (lua_State *L);
参数
libname- 要链接的动态库名称(完整文件名,不可省略扩展名)funcname- 要加载的函数名(完整符号,不可省略lua_open前缀)
返回值
- 返回加载的 C 函数
#package.searchpath
package.searchpath (name, path [, sep [, rep]])
说明
在路径 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"。
参数
name- 要查找的名称path- 查找的路径模板sep- 名称name中的分隔符,生成路径时会被替换为rep;默认为"."rep- 生成路径时替换sep的字符;Windows 系统默认为"\",其它系统默认为"/"
返回值
- 成功时返回第一个成功的文件路径
- 失败时返回
nil和错误消息
#关联文档
- require - 加载模块