資料結構的設計,在一定程度上奠定了整個系統的設計,所以決定寫乙個對lua主要資料結構的分析文章,本來打算寫一篇就好了,但是每個資料型別其實都有點複雜,一篇的話篇幅太長,所以就拆開幾篇來寫了。
為什麼是從tvalue說起,tvalue是實現lua弱資料型別的主要資料結構,不但在指令碼中的值使用了tvalue,連lua的實現中,很多資料結構也依賴於tvalue,tvalue一定程度上貫穿了整個lua。先說一下lua裡面的資料型別:(lua.h :69)
從上面的定義中可以看到,lua的值型別有9種,其中lua_tnone是用於判斷這個變數是否等於為空使用的,這個是lua內部使用的,後面再詳細說明。現在來看lua裡面的tvalue資料結構:(lobject.h 71-75)
在lua裡面,乙個變數使用tvalue這個型別來儲存的,int tt就是上面巨集的型別值(4個位元組),而value則是乙個union(8個位元組)。在這個union中,其實分工也十分明確:
在value中,void* p、lua_number n、int b都是不用**的值型別,而gcobject* gc則都是需要**的物件,下面是gcobject資料結構:(lstate.h 133-145)
gcobject也是乙個union,儲存了乙個gcheader,這個gcheader主要用於gc**機制使用,gc**機制超出了這次討論話題,暫時先忽略。真正儲存值的結構是tstring、udata、closure等等,每個儲存資料的結構都會有gcheader,接下來幾篇文章將會開始逐個資料型別進行解釋。
**:
Lua資料結構
1.簡介 lua語言只有一種基本資料結構,那就是table,所有其他資料結構如陣列啦,類啦,都可以由table實現.2.table的下標 例e05.lua arrays mydata mydata 0 foo mydata 1 42 hash tables mydata bar baz iterat...
Lua資料結構。
方法一 local function dotest array for i 1,4 do array i for j 1,4 do array i j 12 end end for i 1,4 dofor j 1,4 do print array i j endend end 方法二 local f...
lua資料結構
1.說明 k v資料結構,k非nil的任意型別 2.賦值local tab 初始化 key 預設 local tab 訪問 tab 1 key 數字 local tab 訪問 tab 60 key 字串 local tab 訪問 tab.aa 1.方法一 local tab 1.增table.ins...