踏入LuatOS的二次開發領域,掌握關鍵常識是開啟高效編程之旅的第一步。本文將揭示三個不可或缺的核心要點,助你快速突破技術壁壘,深度挖掘系統潛力,讓開發效率與創造力同步飆升。
本期一起來了解LuatOS開發需要熟悉的幾個常識。
一、匿名函數
在Lua代碼里面,經常看到沒有名字的函數。
這種函數定義之后,要么馬上運行,要么作為另一個函數的返回值賦給其他變量,所以并不需要一個函數名字——稱為匿名函數。
匿名函數基礎語法結構:
匿名函數可以某些時候簡化代碼,初學者寫代碼可以先不考慮匿名函數。但是由于匿名函數在你能閱讀到的Lua代碼里面出現的頻次實在是太高了,所以你也不得不重視和習慣匿名函數。
二、閉包
閉包的實現通常是通過在外部函數內部定義一個函數,并將這個內部函數作為外部函數的返回值。
這樣一來,內部函數就可以訪問外部函數作用域中的變量,即使外部函數已經執行完畢,這些變量依然可以被內部函數訪問——從而形成閉包。
常見的閉包實現模式如下:
這樣的好處是,可以定義一個函數,能夠在一定范圍內,訪問外部的變量,實現可控的持續行為。
很多初學者會被這段代碼迷惑,會被繞暈。
這里做一下解釋:
z函數里面聲明的變量,z是函數的參數;
在代碼里面因為f=outer(10),所以f(5)就意味著是調用了兩次函數,傳入了兩個函數的參數:outer(10)(5);
第一次調用,out(10) ,意味著在outer函數里面,y = x這句,x換成10,就是:y = 10;
outer(10)(5)意味著5是內部匿名函數的參數,就是替代z的;
匿名函數返回y+z,這里y是10,z是5,返回的就是10+5=15。
這里比較繞的,就是給了兩次參數,一個是10對應x,一個是5對應z。
匿名函數和閉包,對初學者確實有點繞。很多讀者不明白:為什么z是outer的第二個參數?
這里需要特別搞清楚的是,outer這個函數的返回值是個函數,而且這個函數是有參數的。
那么,這個帶參數的函數賦值給f之后,f就是個函數了。于是給f一個參數5,這個5自然就是返回的函數的參數了,也就是z了。
雖然并不是所有的閉包都是上面這種代碼的實現形式,但是初學者可以先記住這樣的閉包形式。
如果不習慣閉包,初學者可以先避免在代碼里面體現閉包的代碼形式。
三、回調函數
3.1 回調函數是什么
回調函數是在LuatOS編程過程中經常用到的一個技術。理解LuatOS的回調函數,可以從“事件驅動”和“函數作為參數”兩個角度來把握:
回調函數(Callback)——是在特定事件發生時,由系統或框架自動調用你事先定義好的函數。你只需要把自己的函數注冊給系統,等事件觸發時,系統就會幫你調用它。
本質上,回調函數就是一個普通函數,但它被作為參數傳遞或注冊到其他地方,由系統或其他代碼在合適的時機自動執行。
回調函數的作用是實現事件響應,異步處理。
消息到來,定時器到點,網絡收發等功能都經常會用到回調函數的處理。
總之,LuatOS的回調函數,就是你注冊給系統的,在特定事件發生時自動被調用的函數。
回調函數讓事件響應、異步處理、任務解耦變得簡單靈活,是LuatOS事件驅動編程的核心機制之一。
3.2 回調函數做消息訂閱與發布
LuatOS支持通過sys.subscribe訂閱消息并注冊回調函數,消息發布時自動調用回調:
當sys.publish("TEST", 123) 被調用時,LuatOS內部會遍歷訂閱者列表,找到所有訂閱了"TEST" 的回調函數,并自動把參數123傳給這些回調函數。
通過這樣的處理,事件觸發和處理邏輯就被解耦,方便擴展和維護。
3.3 回調函數做定時器和異步操作
定時器到點后自動調用注冊的回調函數:
3.4 任務和協程場景的回調函數使用
在多任務,也就是LuatOS的協程場景下,回調函數也常用于任務喚醒、事件響應等。
解耦調用者與被調用者:調用者只需知道“有回調”,不用關心回調具體做什么,提升靈活性。
你只需更換回調函數,就能實現不同的處理邏輯,無需修改底層框架代碼。
任務和協程的詳細信息,后續再講解。
今天的內容就分享到這里了!
審核編輯 黃宇
-
函數
+關注
關注
3文章
4377瀏覽量
64556 -
LuatOS
+關注
關注
0文章
99瀏覽量
2211
發布評論請先 登錄
突破LuatOS開發瓶頸:三個二次開發必備知識揭秘!

支持二次開發的工業級二維碼掃碼讀頭選購指南

血淚教訓總結:Air780EPM的LuatOS二次開發——OneWire協議調試注意事項

DLP6500想調用API進行自主二次開發,怎么構建開發環境?
怎么配置dlp6500二次開發的環境,可以使用VS2013嗎?
SOLIDWORKS二次開發參數化設計工具? 慧德敏學
SOLIDWORKS二次開發應用范圍與實例
什么~FPGA可以自行二次開發了?

ARMxy ARM工業邊緣計算網關帶Ubuntu OS支持二次開發

評論