從用戶的角度來(lái)看,一個(gè)模塊能夠通過(guò) require 加載并返回一個(gè) table,模塊導(dǎo)出的接口都被定義在此 table 中(此 table 被作為一個(gè) namespace)。所有的標(biāo)準(zhǔn)庫(kù)都是模塊。標(biāo)準(zhǔn)庫(kù)被預(yù)先加載了,就像這樣:
復(fù)制代碼 代碼如下:
math = require 'math'
string = require 'string'
require 函數(shù)
使用 require 函數(shù)加載模塊能夠避免多次重復(fù)加載模塊。加載一個(gè)模塊:
復(fù)制代碼 代碼如下:
require 'modulename'
模塊名(modulename)不那么準(zhǔn)確的來(lái)說(shuō)就是一個(gè)文件名(Lua 文件或者是 C 庫(kù))。一個(gè)模塊被加載后會(huì)被緩存到 pacakge.loaded[modulename] 中??匆粋€(gè)例子:
復(fù)制代碼 代碼如下:
-- test.lua
print 'Hello World'
在 test.lua 的相同目錄下創(chuàng)建 main.lua 文件:
復(fù)制代碼 代碼如下:
-- main.lua
require 'test'
我們可以嘗試多次 require test.lua 文件,但最終只會(huì)輸出一次 Hello World。如果我們希望 require 重新加載模塊,那么可以清理 package.loaded:
復(fù)制代碼 代碼如下:
package.loaded[modulename] = nil
范例:
復(fù)制代碼 代碼如下:
require 'test' --> Hello World
package.loaded.test = nil
require 'test' --> Hello World
編寫(xiě)模塊
編寫(xiě)一個(gè)模塊很簡(jiǎn)單,我們先創(chuàng)建一個(gè) table 然后把需要導(dǎo)出的接口放入 table 中,最后返回此 table:
復(fù)制代碼 代碼如下:
-- test.lua
local exports = {}
function exports.foo()
print 'Hello World'
end
return exports
模塊的返回值會(huì)被賦值給 package.loaded[modulename]:
復(fù)制代碼 代碼如下:
assert(require 'test' == package.loaded.test)
如果模塊不返回值,那么 package.loaded[modulename] 的值將為 true:
復(fù)制代碼 代碼如下:
-- 假定 test.lua 是一個(gè)空文件
local t = require 'test'
print(t) --> true
print(package.loaded.test) --> true
更多的編寫(xiě)模塊的方法見(jiàn):http://lua-users.org/wiki/ModulesTutorial
查找模塊
如果一個(gè)模塊使用 Lua 編寫(xiě),那么將在 package.path 中查找,如果一個(gè)模塊使用 C 編寫(xiě),那么將在 package.cpath 中查找。package.path 和 package.cpath 是一個(gè)分號(hào)分隔的路徑列表,例如:
復(fù)制代碼 代碼如下:
C:\bin\lua\lua\&;.lua;C:\bin\lua\lua\&;\init.lua;C:\bin\lua\&;.lua;C:\bin\lua\&;\init.lua;.\&;.lua
每一個(gè)路徑都有一個(gè) ?,真正的查找路徑是將 ? 替換為模塊名之后的路徑。
實(shí)際上,我們可以自定義查找模塊的規(guī)則(通過(guò)向 package.searchers 中添加適當(dāng)?shù)?searcher 函數(shù)實(shí)現(xiàn)),例如我們可以把所有模塊保存在一個(gè)加密并壓縮的 zip 文件中。
一個(gè)模塊命名為 mod.sub,其是 mod 的子模塊。在查找模塊時(shí),mod.sub 中的 . 號(hào)會(huì)被轉(zhuǎn)換為目錄分隔符。假定路徑列表如下:
復(fù)制代碼 代碼如下:
C:\bin\lua\lua\&;.lua;.\&;.lua
那么 require ‘a(chǎn).b' 將嘗試打開(kāi)文件:
復(fù)制代碼 代碼如下:
C:\bin\lua\lua\a\b.lua
.\a\b.lua
您可能感興趣的文章:- Lua腳本語(yǔ)言簡(jiǎn)明入門(mén)教程
- Lua極簡(jiǎn)入門(mén)指南(一):基礎(chǔ)知識(shí)篇
- Lua極簡(jiǎn)入門(mén)指南(三): loadfile和錯(cuò)誤處理
- Lua極簡(jiǎn)入門(mén)指南(一):函數(shù)篇
- Lua極簡(jiǎn)入門(mén)指南:全局變量
- lua腳本語(yǔ)言快速入門(mén)教程
- Lua入門(mén)學(xué)習(xí)筆記
- Lua 極簡(jiǎn)入門(mén)指南(七):面向?qū)ο缶幊?/li>
- Lua腳本語(yǔ)言基本語(yǔ)法快速入門(mén)教程
- Lua語(yǔ)言新手簡(jiǎn)單入門(mén)教程