欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2014年10月31日 09:43:28   投稿:junjie  
這篇文章主要介紹了Lua極簡(jiǎn)入門(mén)指南(六):模塊,本文講解了require函數(shù)、編寫(xiě)模塊、查找模塊等內(nèi)容,需要的朋友可以參考下

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

相關(guān)文章

  • Lua基本語(yǔ)法

    Lua基本語(yǔ)法

    Lua是相當(dāng)簡(jiǎn)單易學(xué),本篇文章來(lái)給大家稍微講一下Lua的語(yǔ)法,不會(huì)長(zhǎng)篇累牘得把Lua的所有語(yǔ)法都講一遍,這里通過(guò)以下幾點(diǎn)來(lái)講Lua語(yǔ)言的基礎(chǔ)語(yǔ)法。
    2015-05-05
  • Lua教程(一):在C++中嵌入Lua腳本

    Lua教程(一):在C++中嵌入Lua腳本

    這篇文章主要介紹了Lua教程(一):在C++中嵌入Lua腳本,本文在MAC環(huán)境中開(kāi)發(fā),同時(shí)探討了IOS項(xiàng)目集成Lua、Android項(xiàng)目集成Lua等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • Lua中的一些常用函數(shù)庫(kù)實(shí)例講解

    Lua中的一些常用函數(shù)庫(kù)實(shí)例講解

    這篇文章主要介紹了Lua中的一些常用函數(shù)庫(kù)實(shí)例講解,本文講解了數(shù)學(xué)庫(kù)、table庫(kù)、字符串庫(kù)、I/O庫(kù)等常用函數(shù)庫(kù),需要的朋友可以參考下
    2014-09-09
  • 淺析Lua編程中的異常處理

    淺析Lua編程中的異常處理

    這篇文章主要介紹了淺析Lua編程中的異常處理,是Lua入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),要的朋友可以參考下
    2015-05-05
  • Lua之協(xié)同程序coroutine代碼實(shí)例

    Lua之協(xié)同程序coroutine代碼實(shí)例

    這篇文章主要介紹了Lua之協(xié)同程序coroutine代碼實(shí)例,本文給出的代碼示例較為復(fù)雜,需要對(duì)Lua協(xié)同程序有一定的了解方能看懂,需要的朋友可以參考下
    2015-04-04
  • 詳解Lua中的元表和元方法

    詳解Lua中的元表和元方法

    Lua中的元表(Metatable)和元方法(Metamethods)是Lua語(yǔ)言中的重要概念,它們?cè)试S我們對(duì)對(duì)象和操作進(jìn)行自定義,本文講給大家詳細(xì)介紹一下Lua中的元表和元方法,需要的朋友可以參考下
    2023-09-09
  • Lua所有內(nèi)置函數(shù)羅列

    Lua所有內(nèi)置函數(shù)羅列

    這篇文章主要介紹了Lua所有內(nèi)置函數(shù)羅列,本文匯集了Lua腳本語(yǔ)言的所有內(nèi)置函數(shù),需要的朋友可以參考下
    2015-04-04
  • Lua面向?qū)ο缶幊虒W(xué)習(xí)筆記

    Lua面向?qū)ο缶幊虒W(xué)習(xí)筆記

    這篇文章主要介紹了Lua面向?qū)ο缶幊虒W(xué)習(xí)筆記,本文講解了Lua中實(shí)現(xiàn)類(lèi)的例子、類(lèi)之間繼承的例子等內(nèi)容,需要的朋友可以參考下
    2014-12-12
  • 詳解Lua中的變量相關(guān)知識(shí)點(diǎn)

    詳解Lua中的變量相關(guān)知識(shí)點(diǎn)

    這篇文章主要介紹了Lua中的變量相關(guān)知識(shí)點(diǎn),是Lua入門(mén)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Lua中簡(jiǎn)單的錯(cuò)誤處理實(shí)例

    Lua中簡(jiǎn)單的錯(cuò)誤處理實(shí)例

    這篇文章主要介紹了Lua中簡(jiǎn)單的錯(cuò)誤處理實(shí)例,本文講解了Lua錯(cuò)誤處理中的error、assert、pcall等內(nèi)容,需要的朋友可以參考下
    2014-09-09

最新評(píng)論