博客專欄

        EEPW首頁 > 博客 > 高效開發(fā)LuatOS:三大基礎(chǔ)常識深度解析

        高效開發(fā)LuatOS:三大基礎(chǔ)常識深度解析

        發(fā)布人:13673998452 時間:2025-06-25 來源:工程師 發(fā)布文章

        提升LuatOS二次開發(fā)效率,三大基礎(chǔ)常識是關(guān)鍵。理解資源管理原則、調(diào)試工具使用、性能優(yōu)化方法,你將構(gòu)建高效開發(fā)體系,從入門到精通一步到位。

        本期一起來了解LuatOS開發(fā)需要熟悉的幾個常識。
         

         

        一、匿名函數(shù)


        在Lua代碼里面,經(jīng)常看到?jīng)]有名字的函數(shù)。

        這種函數(shù)定義之后,要么馬上運(yùn)行,要么作為另一個函數(shù)的返回值賦給其他變量,所以并不需要一個函數(shù)名字——稱為匿名函數(shù)。

        匿名函數(shù)基礎(chǔ)語法結(jié)構(gòu):

        匿名函數(shù)可以某些時候簡化代碼,初學(xué)者寫代碼可以先不考慮匿名函數(shù)。但是由于匿名函數(shù)在你能閱讀到的Lua代碼里面出現(xiàn)的頻次實(shí)在是太高了,所以你也不得不重視和習(xí)慣匿名函數(shù)。
         

         

        二、閉包     

        閉包的實(shí)現(xiàn)通常是通過在外部函數(shù)內(nèi)部定義一個函數(shù),并將這個內(nèi)部函數(shù)作為外部函數(shù)的返回值。

        這樣一來,內(nèi)部函數(shù)就可以訪問外部函數(shù)作用域中的變量,即使外部函數(shù)已經(jīng)執(zhí)行完畢,這些變量依然可以被內(nèi)部函數(shù)訪問——從而形成閉包。

        常見的閉包實(shí)現(xiàn)模式如下:

        這樣的好處是,可以定義一個函數(shù),能夠在一定范圍內(nèi),訪問外部的變量,實(shí)現(xiàn)可控的持續(xù)行為。

        很多初學(xué)者會被這段代碼迷惑,會被繞暈。

        這里做一下解釋:

        z函數(shù)里面聲明的變量,z是函數(shù)的參數(shù);

        在代碼里面因?yàn)閒=outer(10),所以f(5)就意味著是調(diào)用了兩次函數(shù),傳入了兩個函數(shù)的參數(shù):outer(10)(5);

        第一次調(diào)用,out(10) ,意味著在outer函數(shù)里面,y = x這句,x換成10,就是:y = 10;

        outer(10)(5)意味著5是內(nèi)部匿名函數(shù)的參數(shù),就是替代z的;

        匿名函數(shù)返回y+z,這里y是10,z是5,返回的就是10+5=15。

        這里比較繞的,就是給了兩次參數(shù),一個是10對應(yīng)x,一個是5對應(yīng)z。

        匿名函數(shù)和閉包,對初學(xué)者確實(shí)有點(diǎn)繞。很多讀者不明白:為什么z是outer的第二個參數(shù)?

        這里需要特別搞清楚的是,outer這個函數(shù)的返回值是個函數(shù),而且這個函數(shù)是有參數(shù)的。

        那么,這個帶參數(shù)的函數(shù)賦值給f之后,f就是個函數(shù)了。于是給f一個參數(shù)5,這個5自然就是返回的函數(shù)的參數(shù)了,也就是z了。

        雖然并不是所有的閉包都是上面這種代碼的實(shí)現(xiàn)形式,但是初學(xué)者可以先記住這樣的閉包形式。

        如果不習(xí)慣閉包,初學(xué)者可以先避免在代碼里面體現(xiàn)閉包的代碼形式。

         

         

        三、回調(diào)函數(shù)


         3.1 回調(diào)函數(shù)是什么

        回調(diào)函數(shù)是在LuatOS編程過程中經(jīng)常用到的一個技術(shù)。理解LuatOS的回調(diào)函數(shù),可以從“事件驅(qū)動”和“函數(shù)作為參數(shù)”兩個角度來把握:

        回調(diào)函數(shù)(Callback)——是在特定事件發(fā)生時,由系統(tǒng)或框架自動調(diào)用你事先定義好的函數(shù)。你只需要把自己的函數(shù)注冊給系統(tǒng),等事件觸發(fā)時,系統(tǒng)就會幫你調(diào)用它。

        本質(zhì)上,回調(diào)函數(shù)就是一個普通函數(shù),但它被作為參數(shù)傳遞或注冊到其他地方,由系統(tǒng)或其他代碼在合適的時機(jī)自動執(zhí)行。

        回調(diào)函數(shù)的作用是實(shí)現(xiàn)事件響應(yīng),異步處理。

        消息到來,定時器到點(diǎn),網(wǎng)絡(luò)收發(fā)等功能都經(jīng)常會用到回調(diào)函數(shù)的處理。

        總之,LuatOS的回調(diào)函數(shù),就是你注冊給系統(tǒng)的,在特定事件發(fā)生時自動被調(diào)用的函數(shù)。

        回調(diào)函數(shù)讓事件響應(yīng)、異步處理、任務(wù)解耦變得簡單靈活,是LuatOS事件驅(qū)動編程的核心機(jī)制之一。


         3.2 回調(diào)函數(shù)做消息訂閱與發(fā)布

        LuatOS支持通過sys.subscribe訂閱消息并注冊回調(diào)函數(shù),消息發(fā)布時自動調(diào)用回調(diào):

        當(dāng)sys.publish("TEST", 123) 被調(diào)用時,LuatOS內(nèi)部會遍歷訂閱者列表,找到所有訂閱了"TEST" 的回調(diào)函數(shù),并自動把參數(shù)123傳給這些回調(diào)函數(shù)。

        通過這樣的處理,事件觸發(fā)和處理邏輯就被解耦,方便擴(kuò)展和維護(hù)。

         

        3.3 回調(diào)函數(shù)做定時器和異步操作

        定時器到點(diǎn)后自動調(diào)用注冊的回調(diào)函數(shù):


        3.4 任務(wù)和協(xié)程場景的回調(diào)函數(shù)使用

        在多任務(wù),也就是LuatOS的協(xié)程場景下,回調(diào)函數(shù)也常用于任務(wù)喚醒、事件響應(yīng)等。

        解耦調(diào)用者與被調(diào)用者:調(diào)用者只需知道“有回調(diào)”,不用關(guān)心回調(diào)具體做什么,提升靈活性。

        你只需更換回調(diào)函數(shù),就能實(shí)現(xiàn)不同的處理邏輯,無需修改底層框架代碼。

        任務(wù)和協(xié)程的詳細(xì)信息,后續(xù)再講解。


        今天的內(nèi)容就分享到這里了!


        *博客內(nèi)容為網(wǎng)友個人發(fā)布,僅代表博主個人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。



        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 太湖县| 洞口县| 临安市| 河津市| 花莲县| 弥渡县| 达拉特旗| 土默特右旗| 金昌市| 石楼县| 磐安县| 雅江县| 德令哈市| 西青区| 福清市| 潢川县| 隆昌县| 阿坝县| 永修县| 林口县| 镇安县| 绿春县| 牟定县| 松滋市| 木兰县| 马边| 华亭县| 吉林市| 喀什市| 夏津县| 尖扎县| 遵义市| 河间市| 江达县| 墨江| 磐安县| 平乐县| 疏附县| 新绛县| 阳曲县| 怀仁县|