亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Lua模塊與包學習筆記

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

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

創(chuàng)建模塊

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

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

-- 定義一個名為 module 的模塊
module = {}
 
-- 定義一個常量
module.constant = "this is a constant"
 
-- 定義一個函數(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)就是一個 table 的結(jié)構(gòu),因此可以像操作調(diào)用 table 里的元素那樣來操作調(diào)用模塊里的常量或函數(shù)。不過上面的 func2 聲明為程序塊的局部變量,即表示一個私有函數(shù),因此是不能從外部訪問模塊里的這個私有函數(shù),必須通過模塊里的共有函數(shù)來調(diào)用。

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

加載模塊

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

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

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

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

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

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

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

加載機制

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

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

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

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

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

文件路徑以 ";" 號分隔,最后的 2 個 ";;" 表示新加的路徑后面加上原來的默認路徑。

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

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

source ~/.profile

這時假設(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") 時就會嘗試打開以下文件目錄去搜索目標

復(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

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

相關(guān)文章

  • Lua教程(四):函數(shù)詳解

    Lua教程(四):函數(shù)詳解

    這篇文章主要介紹了Lua教程(四):函數(shù)詳解,本文講解了多重返回值、變長參數(shù)、具名實參、閉合函數(shù)、匿名函數(shù)、非全局函數(shù)等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • Lua教程(三):值與類型介紹

    Lua教程(三):值與類型介紹

    這篇文章主要介紹了Lua教程(三):值與類型介紹,本文起講解了Lua的八種基本類型、userdata、thread、table等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • Lua中的函數(shù)相關(guān)知識點整理匯總

    Lua中的函數(shù)相關(guān)知識點整理匯總

    這篇文章主要介紹了Lua中的函數(shù)相關(guān)知識點整理匯總,包括函數(shù)的參數(shù)傳遞和定義函數(shù)等基本知識,需要的朋友可以參考下
    2015-05-05
  • Lua中if語句嵌套的使用教程

    Lua中if語句嵌套的使用教程

    這篇文章主要介紹了Lua中if語句嵌套的使用教程,是Lua入門學習中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-05-05
  • Lua之字符串格式化例子和常用格式化參數(shù)介紹

    Lua之字符串格式化例子和常用格式化參數(shù)介紹

    這篇文章主要介紹了Lua之字符串格式化例子和常用格式化參數(shù)介紹,本文著重講解了格式化參數(shù)的作用,需要的朋友可以參考下
    2015-04-04
  • Lua中讓回調(diào)函數(shù)支持回調(diào)對象方法的解決方法

    Lua中讓回調(diào)函數(shù)支持回調(diào)對象方法的解決方法

    這篇文章主要介紹了Lua中讓回調(diào)支持對象方法,一般情況下,Lua中只支持回調(diào)一個函數(shù),本文方法實現(xiàn)可以回調(diào)一個對象的方法,需要的朋友可以參考下
    2014-12-12
  • Lua中模塊以及實現(xiàn)方法指南

    Lua中模塊以及實現(xiàn)方法指南

    從Lua 5.1開始,我們可以使用require和module函數(shù)來獲取和創(chuàng)建Lua中的模塊。從使用者的角度來看,一個模塊就是一個程序庫,可以通過require來加載,之后便得到一個類型為table的全局變量。
    2015-04-04
  • Lua中的基本語法、控制語句總結(jié)

    Lua中的基本語法、控制語句總結(jié)

    這篇文章主要介紹了Lua中的基本語法、控制語句總結(jié),本文總結(jié)了賦值、局部變量與塊、控制結(jié)構(gòu)、數(shù)字型for、泛型for等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • lua開發(fā)中實現(xiàn)MVC框架的簡單應(yīng)用

    lua開發(fā)中實現(xiàn)MVC框架的簡單應(yīng)用

    最近的游戲項目中使用了lua腳本來開發(fā),項目中用到了MVC框架,最近有朋友問我怎么弄,在這里簡單分享一下思路和一些開發(fā)中的技巧。有需要的小伙伴可以參考下。
    2015-04-04
  • 實現(xiàn)Lua中數(shù)據(jù)類型的源碼分享

    實現(xiàn)Lua中數(shù)據(jù)類型的源碼分享

    在Lua中有8種基礎(chǔ)類型,像其他動態(tài)語言一樣,在語言中沒有類型定義的語法,每個值都攜帶了它自身的類型信息。下面我們就來嘗試通過Lua 5.2.1的源碼來看類型的實現(xiàn)
    2015-04-04

最新評論