在Lua中,有模塊這個定義,加載一個模塊須要使用require函數,require是一個全局函數。html
require有兩個寫法require("modname")和require "modname"函數
1.首先require函數會查找package.loaded表,檢測modname是否加載過,若是加載過,則再也不加載,若是沒加載過,則繼續ui
2.require加載模塊的按照package.searchers序列的指引來查找加載器,使用另外一個全局函數loader()實現,PS:package.searchers序列能夠需改lua
3.默認的package.searchers序列以下:spa
若是在加載或運行模塊時有錯誤, 或是沒法爲模塊找到加載器, require
都會拋出錯誤。3d
一個描述有一些爲包管理準備的編譯期配置信息的串。 這個字符串由一系列行構成:code
\
' ,對於其它系統是 '/
' 。;
' 。?
' 。!
' 。luaopen_
函數名時被忽略掉。 默認是 '-
'。這個路徑被 require
在 C 加載器中作搜索時用到。htm
Lua 用和初始化 Lua 路徑 package.path
相同的方式初始化 C 路徑 package.cpath
。 它會使用環境變量 LUA_CPATH_5_3
或 環境變量 LUA_CPATH
初始化。 要麼就採用 luaconf.h
中定義的默認路徑。字符串
用於 require
控制哪些模塊已經被加載的表。 當你請求一個 modname
模塊,且 package.loaded[modname]
不爲假時, require
簡單返回儲存在內的值。get
這個變量僅僅是對真正那張表的引用; 改變這個值並不會改變 require
使用的表。
讓宿主程序動態連接 C 庫 libname
。
當 funcname
爲 "*
", 它僅僅鏈接該庫,讓庫中的符號都導出給其它動態連接庫使用。 不然,它查找庫中的函數 funcname
,以 C 函數的形式返回這個函數。 所以,funcname
必須遵循原型lua_CFunction
。
這是一個低階函數。 它徹底繞過了包模塊系統。 和 require
不一樣, 它不會作任何路徑查詢,也不會自動加擴展名。 libname
必須是一個 C 庫須要的完整的文件名,若是有必要,須要提供路徑和擴展名。funcname
必須是 C 庫須要的準確名字 (這取決於使用的 C 編譯器和連接器)。
這個函數在標準 C 中不支持。 所以,它只在部分平臺有效 ( Windows ,Linux ,Mac OS X, Solaris, BSD, 加上支持 dlfcn
標準的 Unix 系統)。
這個路徑被 require
在 Lua 加載器中作搜索時用到。
在啓動時,Lua 用環境變量 LUA_PATH_5_3
或環境變量LUA_PATH
來初始化這個變量。 或採用 luaconf.h
中的默認路徑。 環境變量中出現的全部 ";;
" 都會被替換成默認路徑。
保存有一些特殊模塊的加載器
這個變量僅僅是對真正那張表的引用; 改變這個值並不會改變 require
使用的表。