亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

Lua教程(十一):模塊與包詳解

2024-07-21 23:04:45
字體:
來源:轉載
供稿:網友

從Lua 5.1開始,我們可以使用require和module函數來獲取和創建Lua中的模塊。從使用者的角度來看,一個模塊就是一個程序庫,可以通過require來加載,之后便得到一個類型為table的全局變量。此時的table就像名字空間一樣,可以訪問其中的函數和常量,如:

復制代碼 代碼如下:

require "mod"
mod.foo()
local m2 = require "mod2"
local f = mod2.foo
f() 

 

1. require函數:

    require函數的調用形式為require "模塊名"。該調用會返回一個由模塊函數組成的table,并且還會定義一個包含該table的全局變量。在使用Lua中的標準庫時可以不用顯示的調用require,因為Lua已經預先加載了他們。

    require函數在搜素加載模塊時,有一套自定義的模式,如:
 

復制代碼 代碼如下:

    ?;?.lua;c:/windows/?;/usr/local/lua/?/?.lua
 

    在上面的模式中,只有問號(?)和分號(;)是模式字符,分別表示require函數的參數(模塊名)和模式間的分隔符。如:調用require "sql",將會打開以下的文件:
 
復制代碼 代碼如下:

    sql
    sql.lua
    c:/windows/sql
    /usr/local/lua/sql/sql.lua
 

    Lua將require搜索的模式字符串放在變量package.path中。當Lua啟動后,便以環境變量LUA_PATH的值來初始化這個變量。如果沒有找到該環境變量,則使用一個編譯時定義的默認路徑來初始化。如果require無法找到與模塊名相符的Lua文件,就會找C程序庫。C程序庫的搜索模式存放在變量package.cpath中。而這個變量則是通過環境變量LUA_CPATH來初始化的。
   
2. 編寫模塊的基本方法:

 

    見如下代碼和關鍵性注釋:

復制代碼 代碼如下:

--將模塊名設置為require的參數,這樣今后重命名模塊時,只需重命名文件名即可。
local modname = ...
local M = {}
_G[modname] = M

 

M.i = {r = 0, i = 1}  --定義一個模塊內的常量。
function M.new(r,i) return {r = r, i = i} end
function M.add(c1,c2)
    return M.new(c1.r + c2.r,c1.i + c2.i)
end

function M.sub(c1,c2)
    return M.new(c1.r - c2.r,c1.i - c2.i)
end
--返回和模塊對應的table。
return M

 

3. 使用環境:

仔細閱讀上例中的代碼,我們可以發現一些細節上問題。比如模塊內函數之間的調用仍然要保留模塊名的限定符,如果是私有變量還需要加local關鍵字,同時不能加模塊名限定符。如果需要將私有改為公有,或者反之,都需要一定的修改。那又該如何規避這些問題呢?我們可以通過Lua的函數“全局環境”來有效的解決這些問題。見如下修改的代碼和關鍵性注釋:

復制代碼 代碼如下:

--模塊設置和初始化。這一點和上例一致。
local modname = ...
local M = {}
_G[modname] = M

 

--聲明這個模塊將會用到的全局函數,因為在setfenv之后將無法再訪問他們,
--因此需要在設置之前先用本地變量獲取。
local sqrt = mat.sqrt
local io = io

--在這句話之后就不再需要外部訪問了。
setfenv(1,M)

--后面的函數和常量定義都無需模塊限定符了。
i = {r = 0, i = 1}
function new(r,i) return {r = r, i = i} end
function add(c1,c2)
    return new(c1.r + c2.r,c1.i + c2.i)
end
 
function sub(c1,c2)
    return new(c1.r - c2.r,c1.i - c2.i)
end
--返回和模塊對應的table。
return M

 

4. module函數:

    在Lua 5.1中,我們可以用module(...)函數來代替以下代碼,如:

復制代碼 代碼如下:

local modname = ...
local M = {}
_G[modname] = M
package.loaded[modname] = M
    --[[
    和普通Lua程序塊一樣聲明外部函數。
    --]]
setfenv(1,M)

 

由于在默認情況下,module不提供外部訪問,必須在調用它之前,為需要訪問的外部函數或模塊聲明適當的局部變量。然后Lua提供了一種更為方便的實現方式,即在調用module函數時,多傳入一個package.seeall的參數,如:

復制代碼 代碼如下:

    module(...,package.seeall)

 


注意:5.2已經不支持module了,去看看lua官網的文檔,沒有這個函數了,我用package.loaded.module_name = _ENV來創建模塊

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产91| 久久精品国产2020观看福利| 国产精品久久久久久久久久新婚| 夜夜嗨av色一区二区不卡| 在线日韩日本国产亚洲| 91高清免费在线观看| 91亚洲国产成人精品性色| 蜜月aⅴ免费一区二区三区| 欧美理论电影在线观看| 日韩精品在线免费观看视频| 亚洲欧美在线x视频| 日韩精品中文字幕在线| 亚洲va欧美va国产综合剧情| 亚洲国产成人在线播放| 国内精品久久久久久| 亚洲精品在线视频| 欧美怡春院一区二区三区| 在线精品91av| 亚洲成人免费在线视频| 久久亚洲国产精品| 亚洲激情免费观看| 国产日韩精品一区二区| 欧美日韩美女在线| 亚洲国产成人久久综合| 久久精品美女视频网站| 亚洲欧美日韩在线高清直播| 国产中文字幕日韩| 日韩av免费一区| 欧美专区日韩视频| 国产精品7m视频| 久久青草精品视频免费观看| 日韩av在线网页| 国产伦精品免费视频| 欧美日韩国产一区在线| 日韩在线免费视频观看| 日韩在线国产精品| 在线免费看av不卡| 亚洲第一偷拍网| 亚洲已满18点击进入在线看片| 日韩高清中文字幕| 国产成人精品免高潮在线观看| 1769国内精品视频在线播放| 97**国产露脸精品国产| 国内自拍欧美激情| 亚洲人成在线免费观看| 欧美一区二区大胆人体摄影专业网站| 亚洲国产精品999| 亚洲伊人成综合成人网| 欧美日韩精品中文字幕| 欧美成人午夜免费视在线看片| 欧美亚洲另类在线| 91精品久久久久久久久久久久久久| 欧美日韩精品二区| 欧美视频在线观看 亚洲欧| 国模精品视频一区二区三区| 91精品国产综合久久香蕉922| 中文字幕国产精品| 亚洲精品成人av| 国产精品亚洲第一区| 日韩在线不卡视频| 97婷婷大伊香蕉精品视频| 国产精品狼人色视频一区| 亚洲男人7777| 欧美激情一二区| 亚洲第一福利网站| 欧美老女人在线视频| 亚洲成人a**站| 欧美日韩免费网站| 韩日欧美一区二区| 成人日韩在线电影| 国产精品中文字幕在线| 欧洲美女免费图片一区| 日韩天堂在线视频| 亚洲无限乱码一二三四麻| 精品亚洲aⅴ在线观看| 欧美黄色三级网站| 姬川优奈aav一区二区| 国产亚洲精品高潮| 久久精品青青大伊人av| 欧美性xxxxxxx| 日韩天堂在线视频| 欧美性生交xxxxxdddd| 日韩欧美在线国产| 国产亚洲欧洲在线| 久久国产精品亚洲| 在线激情影院一区| 欧美日韩中文在线观看| 久久精品国产精品| 国产成人综合亚洲| 国产精品色悠悠| 最近中文字幕日韩精品| 国产精品88a∨| 国产激情视频一区| 亚洲一区二区三区777| 欧美丝袜一区二区| 成人性生交大片免费看视频直播| 国产成人av在线播放| 国产精品白丝jk喷水视频一区| 亚洲成在人线av| 亚洲国产精品va| 91精品国产777在线观看| 2019中文字幕在线观看| 久久久国产影院| 欧美激情一级精品国产| 57pao国产成人免费| www.美女亚洲精品| 亚洲国产99精品国自产| 97在线观看免费高清| 日韩黄色高清视频| 日韩视频在线免费观看| 国产精品自拍小视频| 国内精品久久久久久久| 成人午夜在线视频一区| 久久久国产一区| 欧美激情精品在线| 亚洲精品456在线播放狼人| 精品调教chinesegay| 97激碰免费视频| 欧美性猛交xxxx久久久| 国产视频观看一区| 国产精品自拍网| 亚洲国产免费av| 久久久精品免费视频| 久久视频在线播放| 久久99精品久久久久久青青91| 这里只有精品久久| 最近2019中文字幕第三页视频| 色青青草原桃花久久综合| 国产欧美日韩中文字幕| 久久久久久久久久久亚洲| 成人精品久久av网站| 国产美女精品免费电影| 韩国精品久久久999| 国产精品美女久久久免费| 亚洲人成毛片在线播放| 日韩在线高清视频| 欧美激情手机在线视频| 57pao成人永久免费视频| 国产精品永久免费在线| 亚洲qvod图片区电影| 亚洲毛片在线免费观看| 国产精品丝袜久久久久久高清| 国产视频丨精品|在线观看| 91av在线网站| 久久天堂电影网| 国产97色在线|日韩| 97精品久久久中文字幕免费| 亚洲区在线播放| 欧美日韩爱爱视频| 亚洲男女自偷自拍图片另类| 4k岛国日韩精品**专区| 亚洲福利视频免费观看| 麻豆一区二区在线观看| 欧美激情videos| 日韩成人av在线播放| 疯狂做受xxxx高潮欧美日本| 久久夜色精品国产| 日韩精品视频在线观看免费| 亚洲情综合五月天| 亚洲欧美激情四射在线日| 国产精品入口福利| 亚洲国产毛片完整版| 高跟丝袜一区二区三区| 深夜福利日韩在线看|