最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

從用戶的角度來看,一個(gè)模塊能夠通過 require 加載并返回一個(gè) table,模塊導(dǎo)出的接口都被定義在此 table 中(此 table 被作為一個(gè) namespace)。所有的標(biāo)準(zhǔn)庫都是模塊。標(biāo)準(zhǔn)庫被預(yù)先加載了,就像這樣:

復(fù)制代碼 代碼如下:

math = require 'math'
string = require 'string'

require 函數(shù)

使用 require 函數(shù)加載模塊能夠避免多次重復(fù)加載模塊。加載一個(gè)模塊:

復(fù)制代碼 代碼如下:

require 'modulename'

模塊名(modulename)不那么準(zhǔn)確的來說就是一個(gè)文件名(Lua 文件或者是 C 庫)。一個(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

編寫模塊

編寫一個(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

更多的編寫模塊的方法見:http://lua-users.org/wiki/ModulesTutorial

查找模塊

如果一個(gè)模塊使用 Lua 編寫,那么將在 package.path 中查找,如果一個(gè)模塊使用 C 編寫,那么將在 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ī)則(通過向 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' 將嘗試打開文件:

復(fù)制代碼 代碼如下:

C:\bin\lua\lua\a\b.lua
.\a\b.lua

相關(guān)文章

最新評(píng)論

湛江市| 义乌市| 永寿县| 南充市| 彭山县| 临猗县| 梁山县| 磐石市| 海口市| 临夏县| 平顺县| 辽宁省| 通榆县| 临清市| 浠水县| 德兴市| 东港市| 阳城县| 内江市| 金溪县| 二连浩特市| 深水埗区| 买车| 武隆县| 屏南县| 武乡县| 苍山县| 海淀区| 缙云县| 墨竹工卡县| 溆浦县| 南宫市| 宣汉县| 阿拉善左旗| 深水埗区| 丰都县| 阿拉尔市| 金华市| 平安县| 南汇区| 临朐县|