專案組有個很好的習慣,每個禮拜都開展技術交流活動,要求由其中乙個同事作為主講人,以該主講人所擅長的技術方面為主題,進行交流。收到這個任務已經月餘,但最近實在太忙,只得趁週末準備一下。學習lua已經是很久遠的事情了,雖然每天都在運用,而且應該說運用上還是挺溜的,但畢竟運用自如與以簡易明了的語言表達出來還是差距挺大,有些東西雖然理解但要表達出來還是挺有難度,再加上時間緊迫,這裡就當時拋磚引玉吧,希望大牛們多多指點,有紕漏不對之處,還請指正。
本人認為,要了解lua的物件導向,需要從三個方面下手:table、元表與元方法、物件導向。
一、lua的table
講到lua的物件導向,則首先就要了解一下lua中的table。
table是什麼?
table是lua中的資料結構機制,用table來實現關聯陣列,可以表示普通陣列、符號表、集合、記錄、佇列及其他資料結構,也可以來表示模組、包、物件。
如:localt1 = 表示5個數字元素的陣列
localtt =
fork,v in pairs(tt) do
print(k,v)
end可以看到列印為
1 a
2 b
3 c
4 d
其中for k,v in pairs(tt) do 表示迴圈變數tt中的元素,pairs為一種table迭代器,返回元素的鍵和值。可知,預設情況下(即不指定鍵的情況下)table的索引是從1開始的(這和c++的陣列下標從0開始有很大區別),且會自動遞增,對於沒有初始化的元素,索引結構都為nil。所以,lua將nil作為界定陣列結尾的標誌。
localt1 =
t1[4]= nil
fork,v in ipairs(t1) do
print(k,v)
end輸出為
1 1
2 2
3 3
雖然存在t1[5] = 5 和 t1[6] = 6 兩個元素,但t1[4]為nil,則lua認為這個陣列到索引3就結束了,但使用者仍可用t1[5]去索引訪問這個元素。
ipairs與pairs類似,但ipairs為從下標1開始依次遞增索引數字索引的陣列的迭代器。pairs則會無序索引table中的所有元素,包括字元索引和函式等。
localt2 =
fork,v in ipairs(t2) do
print(k , v)
end輸出為
1 1
2 2
3 4
中間雖然有乙個字串索引「abc」,但是後面的沒有指定索引的元素會繼續遞增數字索引。
table中可以儲存值(數字,字串等)、函式(位址),也可以儲存table。
table 既不是值,也不是變數,而是物件。請記住這句非常重要的話!
初步了解了table之後,不繼續深入講解,進入下乙個階段,畢竟這裡主要講的是lua的物件導向。
lua物件導向
直接貼 參考的也是別人的,只不過其中幾點,增加一點自己的理解 local baseclass print baseclass是 tostring baseclass 定義index屬性,指向本身 baseclass.index baseclass 定義建構函式 function baseclass ...
Lua 物件導向
記錄學習過程 建立日期 2019 04 14 物件由屬性和方法組成。lua中最基本的結構是table,所以需要用table來描述物件的屬性。lua 中的 function 可以用來表示方法。那麼lua中的類可以通過 table function 模擬出來。乙個簡單的物件導向例子 屬性 person ...
Lua 物件導向
我們知道,物件由屬性和方法組成。lua中最基本的結構是table,所以需要用table來描述物件的屬性。lua中的function可以用來表示方法。那麼lua中的類可以通過table function模擬出來。至於繼承,可以通過metetable模擬出來 不推薦用,只模擬最基本的物件大部分夠用了 l...