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

Lua模塊與包學(xué)習(xí)筆記

 更新時(shí)間:2014年12月10日 11:15:36   投稿:junjie  
這篇文章主要介紹了Lua模塊與包學(xué)習(xí)筆記,本文講解了加載模塊、加載機(jī)制等內(nèi)容,需要的朋友可以參考下

從 Lua 5.1 開(kāi)始,Lua 加入了標(biāo)準(zhǔn)的模塊管理機(jī)制,可以把一些公用的代碼放在一個(gè)文件里,以API 接口的形式在其他地方調(diào)用,有利于代碼的重用和降低代碼耦合度。

創(chuàng)建模塊

其實(shí) Lua 的模塊是由變量、函數(shù)等已知元素組成的 table,因此創(chuàng)建一個(gè)模塊很簡(jiǎn)單,就是創(chuàng)建一個(gè) table,然后把需要導(dǎo)出的常量、函數(shù)放入其中,最后返回這個(gè) table 就行。格式如下:

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

-- 定義一個(gè)名為 module 的模塊
module = {}
 
-- 定義一個(gè)常量
module.constant = "this is a constant"
 
-- 定義一個(gè)函數(shù)
function module.func1()
    io.write("this is a public function!\n")
end
 
local function func2()
    print("this is a private function!")
end
 
function module.func3()
    func2()
end
 
return module

由上可知,模塊的結(jié)構(gòu)就是一個(gè) table 的結(jié)構(gòu),因此可以像操作調(diào)用 table 里的元素那樣來(lái)操作調(diào)用模塊里的常量或函數(shù)。不過(guò)上面的 func2 聲明為程序塊的局部變量,即表示一個(gè)私有函數(shù),因此是不能從外部訪問(wèn)模塊里的這個(gè)私有函數(shù),必須通過(guò)模塊里的共有函數(shù)來(lái)調(diào)用。

最后,把上面的模塊代碼保存為跟模塊名一樣的 lua 文件里(例如上面是 module.lua),那么一個(gè)自定義的模塊就創(chuàng)建成功。

加載模塊

Lua 提供一個(gè)名為 require 的函數(shù)來(lái)加載模塊,使用也很簡(jiǎn)單,它只有一個(gè)參數(shù),這個(gè)參數(shù)就是要指定加載的模塊名,例如:

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

require("<模塊名>")
-- 或者是
-- require "<模塊名>"

然后會(huì)返回一個(gè)由模塊常量或函數(shù)組成的 table,并且還會(huì)定義一個(gè)包含該 table 的全局變量。

或者給加載的模塊定義一個(gè)別名變量,方便調(diào)用:

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

local m = require("module")
 
print(m.constant)
 
m.func3()

加載機(jī)制

對(duì)于自定義的模塊,模塊文件不是放在哪個(gè)文件目錄都行,函數(shù) require 有它自己的文件路徑加載策略,它會(huì)嘗試從 Lua 文件或 C 程序庫(kù)中加載模塊。

require 用于搜索 Lua 文件的路徑是存放在全局變量 package.path 中,當(dāng) Lua 啟動(dòng)后,會(huì)以環(huán)境變量 LUA_PATH 的值來(lái)初始這個(gè)環(huán)境變量。如果沒(méi)有找到該環(huán)境變量,則使用一個(gè)編譯時(shí)定義的默認(rèn)路徑來(lái)初始化。

當(dāng)然,如果沒(méi)有 LUA_PATH 這個(gè)環(huán)境變量,也可以自定義設(shè)置,在當(dāng)前用戶根目錄下打開(kāi) .profile 文件(沒(méi)有則創(chuàng)建,打開(kāi) .bashrc 文件也可以),例如把 "~/lua/" 路徑加入 LUA_PATH 環(huán)境變量里:

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

#LUA_PATH
export LUA_PATH="~/lua/?.lua;;"

文件路徑以 ";" 號(hào)分隔,最后的 2 個(gè) ";;" 表示新加的路徑后面加上原來(lái)的默認(rèn)路徑。

接著,更新環(huán)境變量參數(shù),使之立即生效:

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

source ~/.profile

這時(shí)假設(shè) package.path 的值是:

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

/Users/dengjoe/lua/?.lua;./?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1/?/init.lua;/usr/local/lib/lua/5.1/?.lua;/usr/local/lib/lua/5.1/?/init.lua

那么調(diào)用 require("module") 時(shí)就會(huì)嘗試打開(kāi)以下文件目錄去搜索目標(biāo)

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

/Users/dengjoe/lua/module.lua;
./module.lua
/usr/local/share/lua/5.1/module.lua
/usr/local/share/lua/5.1/module/init.lua
/usr/local/lib/lua/5.1/module.lua
/usr/local/lib/lua/5.1/module/init.lua

如果找過(guò)目標(biāo)文件,則會(huì)調(diào)用 package.loadfile 來(lái)加載模塊。否則,就會(huì)去找 C 程序庫(kù)。搜索的文件路徑是從全局變量 package.cpath 獲取,而這個(gè)變量則是通過(guò)環(huán)境變量 LUA_CPATH 來(lái)初始。搜索的策略跟上面的一樣,只不過(guò)現(xiàn)在換成搜索的是 so 或 dll 類型的文件。如果找得到,那么 require 就會(huì)通過(guò) package.loadlib 來(lái)加載它。

相關(guān)文章

  • Lua中實(shí)現(xiàn)php的strpos()以及strrpos()函數(shù)

    Lua中實(shí)現(xiàn)php的strpos()以及strrpos()函數(shù)

    這篇文章主要介紹了在Lua中實(shí)現(xiàn)php的strpos()以及strrpos()函數(shù)的方法,需要的朋友可以參考下
    2014-11-11
  • lua?如何獲取指定路徑下的所有文件夾

    lua?如何獲取指定路徑下的所有文件夾

    Lua?是一種輕量小巧的腳本語(yǔ)言,用標(biāo)準(zhǔn)C語(yǔ)言編寫并以源代碼形式開(kāi)放,?其設(shè)計(jì)目的是為了嵌入應(yīng)用程序中,從而為應(yīng)用程序提供靈活的擴(kuò)展和定制功能,這篇文章主要介紹了lua?獲取指定路徑下的所有文件夾,需要的朋友可以參考下
    2024-03-03
  • Lua中table的遍歷詳解

    Lua中table的遍歷詳解

    這篇文章主要介紹了Lua中table的遍歷詳解,本文講解了4種遍歷方法,并詳細(xì)分析了這4種方法的特點(diǎn)、使用環(huán)境、相關(guān)知識(shí)等,需要的朋友可以參考下
    2015-04-04
  • Lua編程示例(三):稀疏表、雙端隊(duì)列、格式化輸出、表和循環(huán)表的格式化輸出

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

    這篇文章主要介紹了Lua編程示例(三):稀疏表、雙端隊(duì)列、格式化輸出、表和循環(huán)表的格式化輸出,本文直接給出實(shí)例代碼,代碼中包含詳細(xì)注釋,需要的朋友可以參考下
    2015-07-07
  • Lua中函數(shù)與面向?qū)ο缶幊痰幕A(chǔ)知識(shí)整理

    Lua中函數(shù)與面向?qū)ο缶幊痰幕A(chǔ)知識(shí)整理

    函數(shù)在面對(duì)對(duì)象的編程中又被叫做方法,會(huì)受到作用域的制約,Lua中具有類等面向?qū)ο蟮奶匦?接下來(lái)我們就來(lái)看一下Lua中函數(shù)與面向?qū)ο缶幊痰幕A(chǔ)知識(shí)整理
    2016-06-06
  • 如何使用Vim搭建Lua開(kāi)發(fā)環(huán)境詳解

    如何使用Vim搭建Lua開(kāi)發(fā)環(huán)境詳解

    這篇文章主要給大家介紹了關(guān)于如何使用Vim搭建Lua開(kāi)發(fā)環(huán)境的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • 在Lua中使用模塊的基礎(chǔ)教程

    在Lua中使用模塊的基礎(chǔ)教程

    這篇文章主要介紹了在Lua中模塊的基本使用方法,是Lua入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Lua中的迭代器淺析

    Lua中的迭代器淺析

    這篇文章主要介紹了Lua中的迭代器淺析,本文先是講解了什么是迭代器,然后給出了自己寫一個(gè)迭代器的示例,最后介紹了迭代器的調(diào)用方法,需要的朋友可以參考下
    2014-09-09
  • Lua簡(jiǎn)介、編譯安裝教程及變量等語(yǔ)法介紹

    Lua簡(jiǎn)介、編譯安裝教程及變量等語(yǔ)法介紹

    這篇文章主要介紹了Lua簡(jiǎn)介、編譯安裝教程及變量等語(yǔ)法介紹,本文同時(shí)講解了lua注釋語(yǔ)法、Lua命令行方式等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • Lua之協(xié)同程序coroutine代碼實(shí)例

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

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

最新評(píng)論

梧州市| 青海省| 奉新县| 广东省| 曲松县| 平原县| 东阳市| 晋州市| 永登县| 金乡县| 江门市| 怀化市| 松原市| 贵定县| 托克托县| 元氏县| 雷州市| 保山市| 虞城县| 富川| 密山市| 原阳县| 衡阳县| 远安县| 清苑县| 特克斯县| 上栗县| 舒城县| 政和县| 镇宁| 南部县| 株洲市| 左权县| 禄丰县| 花莲市| 安远县| 文安县| 水城县| 大石桥市| 丰都县| 兰考县|