LUA的基础数据类型是TValue, 源码如下:
#define TValuefields Value value_; int tt_
typedef struct lua_TValue {
TValuefields;
} TValue;
TValue包含两个成员变量value_和tt_, value_是变量值,tt_是变量类型。
先看value_, 源码如下:
/*
** Union of all Lua values
*/
typedef union Value {
GCObject *gc; /* collectable objects */
void *p; /* light userdata */
int b; /* booleans */
lua_CFunction f; /* light C functions */
lua_Integer i; /* integer numbers */
lua_Number n; /* float numbers */
} Value;
Value是LUA所有类型值的集合。gc是可回收的对象;p是轻量级的userdata区别于full userdata,是指向c对象的指针;b是bool型值;f是函数指针(typedef int (*lua_CFunction)(lua_State *L));i是long long整型值;n是double类型的值。
tt_的不同bit表示不同的含义:
/*
** tags for Tagged Values have the following use of bits:
** bits 0-3: actual tag (a LUA_T* value)
*