【lua学习】2.数据类型
生活随笔
收集整理的這篇文章主要介紹了
【lua学习】2.数据类型
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【lua學(xué)習(xí)】2.數(shù)據(jù)類型
- Lua中的數(shù)據(jù)類型
- 關(guān)于TValue自頂向下分析
- TValue表示所有的Lua數(shù)據(jù)結(jié)構(gòu)并帶一個(gè)類型字段
- Value表示所有的Lua數(shù)據(jù)結(jié)構(gòu)
- GCObject表示所有需要進(jìn)行垃圾回收的數(shù)據(jù)結(jié)構(gòu)
- GCheader表示需要GC的數(shù)據(jù)結(jié)構(gòu)最開(kāi)始的部分
Lua中的數(shù)據(jù)類型
| LUA_TNONE | -1 | 無(wú)類型 | 無(wú) |
| LUA_TNIL | 0 | 空類型 | 無(wú) |
| LUA_TBOOLEAN | 1 | 布爾類型 | 無(wú) |
| LUA_TLIGHTUSERDATA | 2 | 指針 | void* |
| LUA_TNUMBER | 3 | 數(shù)字 | lua_Number |
| LUA_TSTRING | 4 | 字符串 | TString |
| LUA_TTABLE | 5 | 表 | Table |
| LUA_TFUNCTION | 6 | 函數(shù) | CClosure,LClosure |
| LUA_TUSERDATA | 7 | 指針 | void* |
| LUA_TTHREAD | 8 | lua虛擬機(jī),協(xié)程 | lua_State |
關(guān)于TValue自頂向下分析
TValue表示所有的Lua數(shù)據(jù)結(jié)構(gòu)并帶一個(gè)類型字段
(lobject.h) TValue
typedef struct lua_TValue {TValuefields; } TValue;(lobject.h) TValuefields
//Value就是一個(gè)可以代表任何值類型的union //上述宏定義中,tt表示類型,也就是上面表格列舉的宏 #define TValuefields Value value;int ttValue表示所有的Lua數(shù)據(jù)結(jié)構(gòu)
(lobject.h) Value
typedef union {GCObject* gc;//存需要gc類型的值void* p;//存lightuserdata類型的值lua_Number n;//存數(shù)字類型的值int b;//存boolean類型的值 } Value;GCObject表示所有需要進(jìn)行垃圾回收的數(shù)據(jù)結(jié)構(gòu)
(lstate.h) GCObject
union GCObject {GCHeader gch;//看下面定義union TString ts;//LUA_TSTRING 4union Udata u;//LUA_TUSERDATA 7union Closure cl;//LUA_TFUNCTION 6struct Table h;//LUA_TTABLE 5struct Proto p;struct UpVal uv;struct lua_State th;//LUA_TTHREAD 8 };GCheader表示需要GC的數(shù)據(jù)結(jié)構(gòu)最開(kāi)始的部分
(lobject.h) GCheader
typedef struct GCheader {CommonHeader;//看下文 } GCheader;(lobject.h) CommonHeader
//任何和需要進(jìn)行垃圾回收的Lua對(duì)象,必然以CommonHeader為最開(kāi)始的部分 //next 指向下一個(gè)GC鏈表的成員,todo 后面再說(shuō) //tt 表示的數(shù)據(jù)類型,也就是開(kāi)始表格定義的宏 //marked GC相關(guān)的標(biāo)記為,todo 后面再說(shuō) #define CommonHeader GCObject* next; lu_byte tt; lu_byte marked(lobject.h) gcvalue宏 獲取對(duì)象的gc部分
//check_exp看下文 //iscollectable看下文 #define gcvalue(o) check_exp(iscollectable(o), (o)->value.gc))(llimits.h) check_exp 條件成了才展開(kāi)宏
//不判斷c的條件,直接展開(kāi)宏e #define check_exp(c,e) (e)(lobject.h) iscollectable
//判斷一個(gè)對(duì)象是否需要GC,只需要獲得其類型宏值>=字符串即可 #define iscollectable(o) (ttype(o)>=LUA_TSTRING) //ttype看下文(lobject.h) ttype
//看ttype //獲取一個(gè)對(duì)象的類型 #define ttype(o) ((o)->tt)總結(jié)
以上是生活随笔為你收集整理的【lua学习】2.数据类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何判断exe文件是debug还是rel
- 下一篇: 【lua学习】3.字符串