lua基础之package

package.cpath()

require 用于搜索 C 加载程序的路径。 Lua 使用环境变量 LUA_CPATH 或 luaconf.h 中定义的默认路径,以与初始化 Lua 路径 package.path 相同的方式初始化 C 路径 package.cpath。


package.loaded()

require 用来控制哪些模块已经加载的表。 当你需要一个模块 modname 并且 package.loaded[modname] 不是 false 时,require 简单地返回存储在那里的值。


package.loaders()

require 用来控制如何加载模块的表。 此表中的每个条目都是一个搜索器函数。 当寻找一个模块时,require 以升序调用这些搜索器中的每一个,并将模块名称(给 require 的参数)作为其唯一参数。 该函数可以返回另一个函数(模块加载器)或一个字符串来解释为什么它没有找到该模块(如果没有什么可说的则返回 nil)。 Lua 用四个函数初始化这个表。 第一个搜索器只是在 package.preload 表中查找加载器。 第二个搜索器使用存储在 package.path 中的路径查找作为 Lua 库的加载器。 路径是由分号分隔的一系列模板。 对于每个模板,搜索者将模板中的每个问号更改为文件名,文件名是模块名,每个点被“目录分隔符”(如Unix中的“/”)代替; 然后它将尝试打开生成的文件名。 因此,例如,如果 Lua 路径是字符串

“./?.lua;./?.lc;/usr/local/?/init.lua”

搜索模块 foo 的 Lua 文件将尝试按顺序打开文件 ./foo.lua、./foo.lc 和 /usr/local/foo/init.lua。 第三个搜索器使用变量 package.cpath 给出的路径查找作为 C 库的加载器。 例如,如果 C 路径是字符串

“./?.so;./?.dll;/usr/local/?/init.so”

模块 foo 的搜索器将尝试按顺序打开文件 ./foo.so、./foo.dll 和 /usr/local/foo/init.so。一旦找到 C 库,该搜索器首先使用动态链接工具将应用程序与库链接起来。然后它会尝试在库中找到一个 C 函数用作加载程序。这个 C 函数的名称是字符串“luaopen_”与模块名称的副本连接在一起,其中每个点都由下划线代替。此外,如果模块名称有一个连字符,它的前缀直到(包括)第一个连字符被删除。例如,如果模块名称是 a.v1-b.c,函数名称将是 luaopen_b_c。第四个搜索者尝试使用一体式装载机。它在 C 路径中搜索给定模块的根名称的库。例如,当需要 a.b.c 时,它将为 a 搜索 C 库。如果找到,它会在其中查找子模块的开放功能;在我们的示例中,这将是 luaopen_a_b_c。有了这个工具,一个包可以将几个 C 子模块打包到一个库中,每个子模块都保持其原来的开放功能。


package.loadlib(libname,funcname)

将主机程序与 C 库 libname 动态链接。 在该库中,查找函数 funcname 并将该函数作为 C 函数返回。 (因此,funcname 必须遵循协议)。 这是一个低级功能。 它完全绕过了包和模块系统。 与 require 不同,它不执行任何路径搜索,也不会自动添加扩展。 libname 必须是 C 库的完整文件名,必要时包括路径和扩展名。 funcname 必须是 C 库导出的确切名称(这可能取决于所使用的 C 编译器和链接器)。 ANSI C 不支持此函数。因此,它仅在某些平台(Windows、Linux、Mac OS X、Solaris、BSD 以及其他支持 dlfcn 标准的 Unix 系统)上可用。


package.path()

require 用于搜索 Lua 加载程序的路径。 在启动时,Lua 使用环境变量 LUA_PATH 的值或 luaconf.h 中定义的默认路径(如果未定义环境变量)初始化此变量。 任何 ”;;” 环境变量中的值替换为默认路径。


package.preload()

存储特定模块加载程序的表。


package.seeall(module)

为模块设置一个元表,其 __index 字段引用全局环境,以便该模块从全局环境继承值。 用作功能模块的选项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值