二:lua滴数据类型
文章目录2.1 C中实现通用数据结构一般做法2.2 Lua通用数据结构的实现Lua是动态类型脚本语言,同一个变量可以在不同时刻指向不同类型的数据。 用一个通用的数据结构lua_Tvalue统一表示所有在Lua虚拟机中需要保存的数据类型,这里将这个通用数据结构一层一层地拆解开来介绍。C中实现相似的功能,一般做法是怎样2.1 C中实现通用数据结构一般做法如果要用一个通用的数据结构来表示不同数据类型,一
·
- Lua是动态类型脚本语言,
- 同一个变量可以在不同时刻指向不同类型的数据。
- 用一个通用的数据结构lua_Tvalue
- 统一表示所有在Lua虚拟机中需要保存的数据类型,
- 这里将这个通用数据结构一层一层地拆解开来介绍。
- C中实现相似的功能,一般做法是怎样
2.1 C中实现通用数据结构一般做法
- 如果要用一个通用的数据结构来表示不同数据类型,
- 一般的做法应该是这样的。
- 一个字段来存储数据类型
- 需存储不同的数据类型的数据。
-
两种比较常见的做法
-
定义一个公共的数据结构作为基础类型,
- 里面存储的都是表达这个数据的基础信息,
- 其他具体的类型是从这里派生出来。
-
用类似下面的代码来模拟实现面向对象
char *data[0]我看好像不可以这样呢
- 用union将所有数据包进来
- 各有利弊。Lua代码中,一般两种相结合
2.2 Lua通用数据结构的实现
- Lua开始设计中,
- 主要类型:
- 数字(用double表示)、
- 字符串、
- 关联表、nil、
- userdata、
- Lua函数以及C函数。
- 一开始,并没有加入布尔类型,Lua函数和C函数是分开表示
- 5.1.4版本时,
- 加入THREAD类型
- 及布尔类型(见表2-1),同时也将两种函数合并在一起
- LIGHTUSERDATA
- TUSERDATA
- 对应都是void*指针,
- 前者的分配释放由Lua外部使用者完成,
- 后者通过Lua内部来完成的。
- 前者不需要Lua关心它的生存期,由使用者自己去关注
- Lua内部用一个宏
- 表示哪些数据类型需要进行GC
- LUA_TSTRING(包括它)之后的数据类型都要GC
- 这些要GC的数据类型,在Lua中是如何表示?
- 这些需要进行GC的数据类型都会有一个( ommonheader宏定义的成员,并且这个成员在结构体定义的最开始。
- 用于表示表的数据类型 Table
更多推荐
已为社区贡献5条内容
所有评论(0)