lua 字符串包含_Programming in Lualua學習第11期 Lua模塊與包

微信公眾號:GameToolDev
關注可了解更多的游戲工具開發教程。問題或建議,請公眾號留言;

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

1?require?"mod"
2?mod.foo()
3?local?m2?=?require?"mod2"
4?local?f?=?mod2.foo
5?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. 編寫模塊的基本方法:?? ?見如下代碼和關鍵性注釋:

1?--將模塊名設置為require的參數,這樣今后重命名模塊時,只需重命名文件名即可。
?2?local?modname?=?...
?3?local?M?=?{}
?4?_G[modname]?=?M
?5?
?6?M.i?=?{r?=?0,?i?=?1}??--定義一個模塊內的常量。
?7?function?M.new(r,i)?return?{r?=?r,?i?=?i}?end
?8?function?M.add(c1,c2)?
?9?????return?M.new(c1.r?+?c2.r,c1.i?+?c2.i)
10?end
11?
12?function?M.sub(c1,c2)
13?????return?M.new(c1.r?-?c2.r,c1.i?-?c2.i)
14?end
15?--返回和模塊對應的table。
16?return?M?

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

1?--模塊設置和初始化。這一點和上例一致。
?2?local?modname?=?...
?3?local?M?=?{}
?4?_G[modname]?=?M
?5?
?6?--聲明這個模塊將會用到的全局函數,因為在setfenv之后將無法再訪問他們,
?7?--因此需要在設置之前先用本地變量獲取。
?8?local?sqrt?=?mat.sqrt
?9?local?io?=?io
10?
11?--在這句話之后就不再需要外部訪問了。
12?setfenv(1,M)
13?
14?--后面的函數和常量定義都無需模塊限定符了。
15?i?=?{r?=?0,?i?=?1}
16?function?new(r,i)?return?{r?=?r,?i?=?i}?end
17?function?add(c1,c2)?
18?????return?new(c1.r?+?c2.r,c1.i?+?c2.i)
19?end
20??
21?function?sub(c1,c2)
22?????return?new(c1.r?-?c2.r,c1.i?-?c2.i)
23?end
24?--返回和模塊對應的table。
25?return?M

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

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

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

版權申明:內容來源網絡,版權歸原創者所有。除非無法確認,我們都會標明作者及出處,如有侵權煩請告知,我們會立即刪除并表示歉意。謝謝。

fa34928973690619d0e83307529b0d69.png

GameToolDev

ID:GameToolDev

www.GameToolDev.Com

游戲工具開發丨Unity開發技術丨AI技能編輯器丨地圖編輯器

c1e7f455a7c76e43ede3654be9a79366.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/533120.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/533120.shtml
英文地址,請注明出處:http://en.pswp.cn/news/533120.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學計算機優盤多少內存夠用,u盤建議買多大內存的

大家好,我是時間財富網智能客服時間君,上述問題將由我為大家進行解答。u盤建議買多大內存主要看用途,一般容量為:1G、2G、4G、8G、16G、32G、64G、128G、256G、512G、1T,具體來說:1、如果是用來存放視頻的&…

.net 從txt中讀取行數據_【VBA項目】從指定文件中讀取數據并繪制圖表

VBA 是一種很久遠的編程語言,但并不過時。在滿足以下兩個條件時,借助 VBA 可以極大的提升生產率,降低出錯率:你的電腦上不允許自主安裝軟件; 你需要執行的工作中大部分的步驟都是固定且重復的。項目背景近期接到一個工…

本地攝像頭應用到遠程計算機,遠程攝像頭設置

可以的,智能家用監控攝像頭,只要你手機有網,千里之外打開手機都可以查看視頻,而且智能攝像頭主要用于看家看孩子看老人照看貓貓狗狗等寵物的。智能攝像頭,與市面上普通的事件錄制不一樣,它可以實現7*24小時…

axure實現復選框全選_jq簡單的全選、反選和全不選效果

jquery是很實用和方便的前端效果庫,可以讓我減少很多的操作和節省很多的時間。今天,我們來說一下jq的全選、全不選和反選效果,本篇講的是最簡單簡潔的jq全選、全不選和反選的例子。如果還有什么其他的功能要求可自己根據所學到的基礎來擴展一…

計算機設備管理器驅動,設備管理器安裝驅動程序的詳細教程

系統出現問題,很多人都會選擇重裝系統。但系統重裝后,我們所做的第一件事,就是安裝驅動。有的驅動程序有安裝包,直接安裝就行了。但是有的驅動是只有驅動程序文件,而沒有執行程序,這時候就需要通過設備管理…

ef執行原生sql語句_EF Core中執行原生SQL語句

一、課程介紹之所以今天錄制這個系列文章的主要原因是,想在快速幫助到大家上手在ASP.NET Core WebAPI中結合EF Core來操作我們的數據庫。EF Core的基礎文章和基礎課程實在是太多了,那么阿笨既然也來錄制這個系列課堂,阿笨想必肯定會給大家帶來…

華立學院計算機組成原理考試,廣東工業大學華立學院計算機組成原理期末復習重點...

廣工華立-2015-2016學年度-計算機組成原理考試復習一、考試題型:分為選擇、判斷、填空、簡述題四大類。其中選擇題有大約三分之一送分,大題占了50分、題目從課后作業出、重點大題為:指令方面;芯片連接;硬盤計算外存&am…

電路串聯和并聯圖解_一個關于交流電路諧振現象的仿真實驗

對于一個具有電阻、電感、電容的交流電路中,交流電源兩端的電壓一般不和它輸出的電流同相位。如果調節電路的參數或者電源頻率使它們同相位,這時電路就發生了諧振現象。按照發生諧振現象的電路不同,可以分為串聯諧振和并聯諧振。1、串聯諧振在…

sync不生效 vue_Vue實戰項目-記賬器-重要知識點匯總

歷時3周,記賬器項目終于可以運行了,這次項目是基于Vue開發,用到了typeScript和Scss,下面基于項目做一個階段性的總結,回顧一下項目中用到的知識點。一.組件一開始用的是JS對象的寫法:構造選項:{ data(){ret…

開設計算機課程的必要性,學前教育專業開設計算機音樂制作課程的必要性與可行性...

學前教育專業開設計算機音樂制作課程的必要性與可行性李 萍430061【期刊名稱】課程教育研究【年(卷),期】2012(000)020【總頁數】1一、學前教育專業開設音樂相關課程的現狀二、現代教育的新型特點,計算機音樂及制作的發展概況三、計算機音樂制作在學前教育專業開設的…

fifo頁面置換算法設計思路_千萬級并發!如何設計一個多級緩存系統?

什么是一個多級緩存系統?它有什么用?我們又如何設計一個多級緩存系統?圖片來自 Pexels所謂多級緩存系統,就是指在一個系統的不同的架構層級進行數據緩存,以提升訪問效率。我們都知道,一個緩存系統,它面臨著許多問題&#xff0c…

廣東省計算機學校哪所最好,廣東省哪個技校比較好哪里好

湖北省有少數大中專院校在教育事業中,無論是投入還是創辦教育學院,都比較好,的話就是至少能賺到三成。至于那些綜合性、公益性大的院校,可能要好幾千塊錢不是問題,畢竟我們是藝術類的,所以畢竟整體上看&…

apple quicktime怎么在ppt中用_PPT情感專題大賞No. 007:一份這就是街舞第三季主題PPT(上集)...

Hello,大家好,這里是千師傅小作坊第35期,我是你們的老朋友千千。熟悉千師傅小作坊的人都知道,千師傅特別喜歡看綜藝,尤其是音樂、表演、舞蹈類。作為一個十八線PPT設計師,如果我看到好看的節目視覺設計&…

計算機語言低下限高上限,學習語言有沒有上限

學習語言有沒有上限科學家普遍認為,語言是人類特有的認知天賦的一部分,所以長期以來,科學家一直在研究疾病和創傷如何削弱語言能力。但是,直到現在,科學家仍不清楚一個人最多能掌握多少種語言。在經過長期沉默后&#…

idea內存溢出解決_各種OOM代碼樣例及解決方法

針對目前大家對OOM的類型不太熟悉,那么來總結一下各種OOM出現的情況以及解決方法。把各種OOM的情況列出來,然后逐一進行代碼編寫復現和提供解決方法。1. 堆溢出-java.lang.OutOfMemoryError: Java heap space。2. 棧溢出-java.lang.OutOfMemorryError。3…

win7安裝硬盤后無法啟動計算機,硬盤裝Win7系統電腦后開機提示DISK BOOT FAILURE怎么辦【圖文】...

很多人都喜歡安裝win7系統,而硬盤安裝系統的方式也是深受用戶們的喜歡,但是最近有用戶反映說硬盤安裝win7系統之后,在重啟計算機的時候屏幕提示DISK BOOT FAILURE,INSERT SYSTEM DISK AND PRESS ENTER,導致無法正常進入系統&#…

導入數據中文亂碼_基于Navicat和Kettle的數據遷移完全解讀(多圖)

需求描述對于數據分析人員來說,工作的基礎是數據,沒有數據分析就無從談起,即巧婦難為無米之炊。#數據庫# #數據遷移# #Oracle# 然而,數據分析往往在實驗環境或者準生產環境中開展,而數據分布在生產環境,因此…

怎樣能確保計算機安全,如何確保電腦安全

如何確保電腦安全電腦安全問題層出不窮,如何確保電腦安全呢?下面是小編分享的一些方法,一起來看一下吧。一、關閉默認共享大部分的電腦系統在默認的情況下都是自動開啟網絡共享設置的,Win7系統也不例外,該功能主要是為了用戶能夠…

點云平面提取_基于LiDAR點云數據濾波方法

基于LiDAR點云數據濾波方法機載激光雷達所獲取的數據被稱為“點云(points cloud)”它在三維空間中呈現出隨機分布的形狀。在點云中,有些點屬于真實的地形表面的點,有些點屬于人工建筑物塔、輸電線、橋等或自然植被如樹、灌木、草、其他植物。激光雷達數據…

全國計算機一級書紅色封面,年度最強的網紅錄取通知書,竟然附贈了一張黑膠唱片...

這兩天世超被一張來自中國科學院大學的錄取通知書給刷屏了,這份錄取通知書里還附贈了一張黑膠光盤。光盤上刻錄了一份國科大為新生準備的特別的禮物 —— 一段來自宇宙深處的聲音。它們是由國科大師生通過 500 米口徑球面射電望遠鏡( FAST )捕獲的 15 顆脈沖星信號&…