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

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

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

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

復制代碼 代碼如下:

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

require 函數(shù)

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

復制代碼 代碼如下:

require 'modulename'

模塊名(modulename)不那么準確的來說就是一個文件名(Lua 文件或者是 C 庫)。一個模塊被加載后會被緩存到 pacakge.loaded[modulename] 中??匆粋€例子:

復制代碼 代碼如下:

-- test.lua
print 'Hello World'

在 test.lua 的相同目錄下創(chuàng)建 main.lua 文件:

復制代碼 代碼如下:

-- main.lua
require 'test'

我們可以嘗試多次 require test.lua 文件,但最終只會輸出一次 Hello World。如果我們希望 require 重新加載模塊,那么可以清理 package.loaded:

復制代碼 代碼如下:

package.loaded[modulename] = nil

范例:

復制代碼 代碼如下:

require 'test'  --> Hello World
package.loaded.test = nil
require 'test'  --> Hello World

編寫模塊

編寫一個模塊很簡單,我們先創(chuàng)建一個 table 然后把需要導出的接口放入 table 中,最后返回此 table:

復制代碼 代碼如下:

-- test.lua
local exports = {}
 
function exports.foo()
    print 'Hello World'
end
 
return exports

模塊的返回值會被賦值給 package.loaded[modulename]:

復制代碼 代碼如下:

assert(require 'test' == package.loaded.test)

如果模塊不返回值,那么 package.loaded[modulename] 的值將為 true:

復制代碼 代碼如下:

-- 假定 test.lua 是一個空文件
local t = require 'test'
print(t)                    --> true
print(package.loaded.test)  --> true

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

查找模塊

如果一個模塊使用 Lua 編寫,那么將在 package.path 中查找,如果一個模塊使用 C 編寫,那么將在 package.cpath 中查找。package.path 和 package.cpath 是一個分號分隔的路徑列表,例如:

復制代碼 代碼如下:

C:\bin\lua\lua\?.lua;C:\bin\lua\lua\?\init.lua;C:\bin\lua\?.lua;C:\bin\lua\?\init.lua;.\?.lua

每一個路徑都有一個 ?,真正的查找路徑是將 ? 替換為模塊名之后的路徑。

實際上,我們可以自定義查找模塊的規(guī)則(通過向 package.searchers 中添加適當?shù)?searcher 函數(shù)實現(xiàn)),例如我們可以把所有模塊保存在一個加密并壓縮的 zip 文件中。

一個模塊命名為 mod.sub,其是 mod 的子模塊。在查找模塊時,mod.sub 中的 . 號會被轉(zhuǎn)換為目錄分隔符。假定路徑列表如下:

復制代碼 代碼如下:

C:\bin\lua\lua\?.lua;.\?.lua

那么 require ‘a(chǎn).b' 將嘗試打開文件:

復制代碼 代碼如下:

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

相關文章

  • lua閉包的理解以及表與函數(shù)的幾種表達方法

    lua閉包的理解以及表與函數(shù)的幾種表達方法

    本文首先通過具體的例子講解了Lua中閉包的概念,然后總結(jié)了閉包的應用場合,最后探討了Lua中閉包的實現(xiàn)原理,以及l(fā)ua中表與函數(shù)的3種表達方式的匯總
    2015-08-08
  • Lua中的元表和元方法學習筆記

    Lua中的元表和元方法學習筆記

    這篇文章主要介紹了Lua中的元表和元方法學習筆記,本文主要講解了getmetatable獲取元表、setmetatable修改元表等內(nèi)容,需要的朋友可以參考下
    2014-12-12
  • Lua數(shù)據(jù)類型介紹

    Lua數(shù)據(jù)類型介紹

    這篇文章主要介紹了Lua數(shù)據(jù)類型介紹,本文講解了Lua中的nil(空)、boolean(布爾)、number(數(shù)字)、string(字符串)、table(表)、function(函數(shù))、thread(線程)、userdata(自定義類型)等數(shù)據(jù)類型,需要的朋友可以參考下
    2014-12-12
  • Lua模塊與包學習筆記

    Lua模塊與包學習筆記

    這篇文章主要介紹了Lua模塊與包學習筆記,本文講解了加載模塊、加載機制等內(nèi)容,需要的朋友可以參考下
    2014-12-12
  • 舉例簡介Lua中函數(shù)的基本用法

    舉例簡介Lua中函數(shù)的基本用法

    這篇文章主要介紹了舉例簡介Lua中函數(shù)的基本用法,--兩個橫線開始單行的注釋,--[[加上兩個[和]表示多行的注釋--]],需要的朋友可以參考下
    2015-07-07
  • Lua中table庫函數(shù)方法介紹

    Lua中table庫函數(shù)方法介紹

    這篇文章主要介紹了Lua中table庫函數(shù)方法介紹,本文講解了concat、insert、maxn、remove、sort、foreachi等方法,需要的朋友可以參考下
    2014-11-11
  • Lua學習筆記之數(shù)據(jù)類型

    Lua學習筆記之數(shù)據(jù)類型

    這篇文章主要介紹了Lua學習筆記之數(shù)據(jù)類型,本文同時講解了開發(fā)環(huán)境的搭建,需要的朋友可以參考下
    2014-09-09
  • Lua中計算、執(zhí)行字符串中Lua代碼的方法

    Lua中計算、執(zhí)行字符串中Lua代碼的方法

    這篇文章主要介紹了Lua中計算、執(zhí)行字符串中Lua代碼的方法,類似JavaScript中eval函數(shù)的功能,在Lua中也可以實現(xiàn),需要的朋友可以參考下
    2015-05-05
  • Lua編程示例(三):稀疏表、雙端隊列、格式化輸出、表和循環(huán)表的格式化輸出

    Lua編程示例(三):稀疏表、雙端隊列、格式化輸出、表和循環(huán)表的格式化輸出

    這篇文章主要介紹了Lua編程示例(三):稀疏表、雙端隊列、格式化輸出、表和循環(huán)表的格式化輸出,本文直接給出實例代碼,代碼中包含詳細注釋,需要的朋友可以參考下
    2015-07-07
  • Lua編程中的一些基本語法整理

    Lua編程中的一些基本語法整理

    這篇文章主要介紹了Lua編程中的一些基本語法整理的相關資料,是Lua入門中最基礎的知識,需要的朋友可以參考下
    2015-05-05

最新評論

六盘水市| 阳高县| 柳林县| 屏山县| 嫩江县| 新巴尔虎右旗| 古田县| 富锦市| 毕节市| 株洲市| 柳林县| 黑山县| 枞阳县| 资溪县| 罗甸县| 榕江县| 茂名市| 南开区| 津南区| 江孜县| 望城县| 无锡市| 报价| 化隆| 白沙| 泸定县| 湖北省| 阳东县| 通化市| 大化| 天峨县| 宝应县| 佛学| 长兴县| 彭州市| 靖宇县| 兴山县| 鄂尔多斯市| 巴彦淖尔市| 镇雄县| 西贡区|