Lua標準庫-模塊(Modules)
包庫為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