濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > Lua極簡(jiǎn)入門(mén)指南(六):模塊

Lua極簡(jiǎn)入門(mén)指南(六):模塊

熱門(mén)標(biāo)簽:個(gè)人怎么在地圖標(biāo)注需要的店鋪 漳州智云呼電話機(jī)器人 百度地圖標(biāo)注早餐區(qū)域 冀州市地圖標(biāo)注 新岸線智能電銷(xiāo)機(jī)器人 清朝地圖標(biāo)注哈爾濱 怎么去除地圖標(biāo)注 地圖標(biāo)注大廈 武漢外呼防封系統(tǒng)多少錢(qián)

從用戶的角度來(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)教程

標(biāo)簽:濰坊 德宏 宣城 金昌 天門(mén) 臺(tái)灣 儋州 天門(mén)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Lua極簡(jiǎn)入門(mén)指南(六):模塊》,本文關(guān)鍵詞  Lua,極簡(jiǎn),入門(mén),指南,六,模塊,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Lua極簡(jiǎn)入門(mén)指南(六):模塊》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于Lua極簡(jiǎn)入門(mén)指南(六):模塊的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    三都| 偏关县| 沛县| 东安县| 隆昌县| 满洲里市| 武城县| 来凤县| 阜阳市| 临沭县| 怀柔区| 浮山县| 色达县| 洪雅县| 西和县| 威远县| 裕民县| 万盛区| 凌源市| 简阳市| 海原县| 蒙城县| 东城区| 兴隆县| 嫩江县| 金沙县| 广东省| 贵德县| 百色市| 和政县| 哈巴河县| 虎林市| 曲阳县| 兴海县| 报价| 泸定县| 繁昌县| 河间市| 平阴县| 舟曲县| 洛浦县|