Lua标准库-模块(Modules)

开发 前端
包库为Lua提供简易的加载及创建模块的方法,由require、module方法及package表组成

包库为Lua提供简易的加载及创建模块的方法,由require、module方法及package表组成

1、module (name [, ···])

功能:建立一个模块。

当package.loaded[name]中存在时,当中的表作为module;

当在全局表中存在name指定的表时,此表作为module;

当以前两种情况都不存表name时,将新建一个表,并使其作为全局名name的值,并package.loaded[name],而且设 t._NAME为name,t._M为module,t._PACKAGE为包的全名(模块名-组件a.b.c);最后把此module设t作为当前函数 的新环境表和package.loaded[name]的新值(也就是说,旧的环境表将不能访问,除了加上package.seeall参数外),以被 require使用

module(name)后的可选参数为接收module名的函数,如package.seeall

2、require (modname)

功能:加载指定的模块。

此函数先检测package.loaded表中是否存在modname,存在则直接返回当中的值,没有则通过郰定义的加载器加载modname。

查找加载器顺序:

(1)检测package.preload表是否存在modname,有则加载

(2)通过Lua Loader加载,通过查找存放于package.path的路径加载,有则加载

(3)通过C Loader加载,通过查找存放于package.cpath的路径加载,有则加载

(4)通过all-in-one Loader加载:

通过查找modname.dll并查找当中的luaopen_

其中XXXX为载块名-后的字符用_替换.后的字符:如:a.v1-b.c 当函数名为luaopen_b_c

当require查找的不是一个Lua库或C库,它就会调用all-in-one loader,此加载器是用C路径作为载块的目录,

当查找到合适的加载器时,require就会加载其中的模块,当加载器有返回值,将会存放于package.loaded[modname]表。最后返回package.loaded[modname]表

当加载失败时,require将触发错误

3、package.cpath

功能:用于require C loader的搜索路径

可以通过修改LUA_CPATH变量(luaconf.h)修改此值

4、package.loaded

功能:一个用于让require知道哪些模块已加载的记录表,如果package.loaded已经有require要的值,则直接返回此值

5、package.loadlib (libname, funcname)

功能:通过动态连接C函数库方式加载Lua扩展库

libname为库文件名,funcname为入口函数(此函数必须为纯C接口函数 c++则需用 extern "C" {} 进行限制)

6、package.path

功能:用于require Lua loader的搜索路径

可以通过修改LUA_PATH变量(luaconf.h)修改此值

7、package.preload

功能:一个用于保存特殊模块加载器的表

8、package.seeall(module)

功能:为module设置一个元表,此元表的__index字段的值为全局环境_G。所以module可以访问全局环境

注:以此函数作为module()的一个选项(详细见module())

原文链接:http://tech.it168.com/j/2008-02-17/200802171009779.shtml

责任编辑:陈四芳 来源: 来自ITPUB论坛
相关推荐

2013-12-12 16:59:15

Lua表处理

2013-12-12 17:27:51

Lua协同

2013-12-12 17:03:57

Lua脚本语言

2013-12-03 17:32:05

Lua脚本语言

2013-12-12 17:08:24

Lua字符串

2013-12-12 17:21:46

Lua出入输出

2011-08-29 15:53:04

Lua位运算

2023-03-01 07:21:33

2023-03-03 10:26:49

Python内建库模块

2015-03-10 18:13:08

2013-09-10 09:54:50

2011-08-23 16:37:05

Lua数学库

2012-07-30 09:40:52

Lua

2011-08-31 17:35:18

Lua解释器Script.NET

2011-08-23 15:02:59

LuaTable

2011-09-06 17:12:25

Lua脚本C++封装库

2023-04-02 23:13:07

Go语言bufio

2010-02-03 11:26:28

2021-06-10 18:40:32

ES 标准模块化

2011-08-31 16:06:50

LuaWeb开发
点赞
收藏

51CTO技术栈公众号