Lua数据对象模型
首先Lua语言分为8种基本类型:nil、number、bool、string、table、thread、function、userdate。对应的Lua C 通用类型结构如下:
Lua数据对象组织_zw.png
统一通过TValue联合体表示数据结构,看源码过程中很多使用联合体的地方,看到Lua无不在细节上考虑内存和性能的问题。数据分为需要GC和不需要GC的两部分:
不需要GC数据类型:
void *p; /* light userdata */
lua_CFunction f; /* light C functions */
lua_Integer i; /* integer numbers */
lua_Number n; /* float numbers */
需要GC数据类型:
struct TString ts;
struct Udata u;
union Closure cl;
struct Table h;
struct Proto p;
struct lua_State th; /* thread */
struct UpVal upv;
有C++面向对象的经验的同学,看到这里是不是有面向对象的影子,Lua C内部很多通过struct嵌套、union、宏定义组织数据来实现面向对象。这里顺便提下lua脚本也可以实现面向对象,实践过程中你会发现通过lua表、元表来实现面向对象,后续会在深入篇中介绍探索表、元表内部实现。