二:lua滴数据类型

文章目录

  • 2.1 C中实现通用数据结构一般做法
  • 2.2 Lua通用数据结构的实现

  • Lua是动态类型脚本语言,
    • 同一个变量可以在不同时刻指向不同类型的数据。

  • 用一个通用的数据结构lua_Tvalue
    • 统一表示所有在Lua虚拟机中需要保存的数据类型,
    • 这里将这个通用数据结构一层一层地拆解开来介绍。
    • C中实现相似的功能,一般做法是怎样

2.1 C中实现通用数据结构一般做法

  • 如果要用一个通用的数据结构来表示不同数据类型,
  • 一般的做法应该是这样的。

  • 一个字段来存储数据类型
  • 需存储不同的数据类型的数据。

  • 两种比较常见的做法

  • 定义一个公共的数据结构作为基础类型,

    • 里面存储的都是表达这个数据的基础信息,
    • 其他具体的类型是从这里派生出来。
  • 用类似下面的代码来模拟实现面向对象

二:lua滴数据类型_第1张图片

char *data[0]我看好像不可以这样呢

  • 用union将所有数据包进来
二:lua滴数据类型_第2张图片
  • 各有利弊。Lua代码中,一般两种相结合

2.2 Lua通用数据结构的实现

  • Lua开始设计中,
    • 主要类型:
    • 数字(用double表示)、
    • 字符串、
    • 关联表、nil、
    • userdata、
    • Lua函数以及C函数。
  • 一开始,并没有加入布尔类型,Lua函数和C函数是分开表示

  • 5.1.4版本时,
  • 加入THREAD类型
  • 及布尔类型(见表2-1),同时也将两种函数合并在一起
二:lua滴数据类型_第3张图片 二:lua滴数据类型_第4张图片
  • LIGHTUSERDATA
  • TUSERDATA
  • 对应都是void*指针,
  • 前者的分配释放由Lua外部使用者完成,
    • 后者通过Lua内部来完成的。
  • 前者不需要Lua关心它的生存期,由使用者自己去关注

  • Lua内部用一个宏
  • 表示哪些数据类型需要进行GC
  • LUA_TSTRING(包括它)之后的数据类型都要GC

  • 这些要GC的数据类型,在Lua中是如何表示?

  • 这些需要进行GC的数据类型都会有一个( ommonheader宏定义的成员,并且这个成员在结构体定义的最开始。
  • 用于表示表的数据类型 Table
二:lua滴数据类型_第5张图片

二:lua滴数据类型_第6张图片

你可能感兴趣的:(lua系列)