(1) Lua源码系列----数据类型的源码
2018-01-03 10:46
375 查看
Lua的数据类型
说明:Lua版本 5.3.4如果让自己利用C去实现Lua的数据类型,你会怎么做?
1. C语言实现的两种常见方法
1.1. 方法①
各个数据独立,比如在lighttpd1.4.47中,字符串和整数的定义抽象如下:typedef struct { int type; //数据类型 char* str; ... //其他内容 } data_string; //字符串 typedef struct { int type; int integer; ... //其他内容 }data_integer;
1.2 方法②
还有一种将所有数据类型用union组织起来的方式,比如typedef struct { int type; union { char *str; int integer; }v; }value;
2. Lua中的实现
Lua将所有的数据类型都通过通用数据类型表示,所以整体结构上和方法②相似。下面先说一下Lua的数据类型。
lua的数据类型可以分为两大类,需要GC的和非GC的。
宏 | 类型 | 对应数据结构 |
---|---|---|
LUA_TNONE -1 | 无 | 无 |
LUA_TNIL 0 | 空类型 | 无 |
LUA_TBOOLEAN 1 | 布尔 | 无 |
LUA_TLIGHTUSERDATA 2 | 指针 | void* |
LUA_TNUMBER 3 | 数据 | lua_Number |
LUA_TSTRING 4 | 字符串 | TString |
LUA_TTABLE 5 | 表 | Table |
LUA_TFUNCTION 6 | 函数 | CClosure、LClosure |
LUA_TUSERDATA 7 | 指针 | void* |
LUA_TTHREAD 8 | Lua虚拟机、协程 | lua_State |
2.1 GC 数据类型
typedef struct GCObject GCObject; #define CommonHeader GCOjbect *next; lu_byte tt; lu_byte marked struct GCObject { CommonHeader; }
2.2 通用数据
/*lua 通用数据 */ typedef union Value { GCObject *gc; /* collectable objects 指向 TString, Table等 */ void *p; /* light userdata */ int b; /* booleans */ l 8b37 ua_CFunction f; /* light C functons */ lua_Integer i; /* integer numbers */ lua_Number n; /* float numbers */ } Value; #define TValuefields Value value_; int tt_ typedef struct lua_TValue { TValuefields; }
相关文章推荐
- lua源码阅读(2)---数据类型
- 云星数据---Scala实战系列(精品版)】:Scala入门教程038-Scala实战源码-Scala match语句03 类型匹配
- Lua中数据类型的源码实现
- 实现Lua中数据类型的源码分享
- 云星数据---Scala实战系列(精品版)】:Scala入门教程033-Scala实战源码-Scala apply方法01 调用
- JavaScript系列文章:不能不看的数据类型检测
- javascript 简单高效判断数据类型 系列函数 By shawl.qiu
- JavaScript语法入门系列(三) 基本数据类型及其对应对象类型
- 大数据系列-scala类型定义
- MongoDB学习系列10:mongodb的数据类型
- 【Redis源码剖析】 - Redis数据类型之有序集合zset
- 云星数据---Scala实战系列(精品版)】:Scala入门教程047-Scala实战源码-Scala method操作
- webservice系列1---基于web工程上写一个基本数据类型的webservice
- faster rcnn源码解读(四)之数据类型imdb.py和pascal_voc.py(主要是imdb和roidb数据类型的解说)
- 精通Javascript系列之数据类型 字符串
- 共同学习Java源码--常用数据类型--String(十)
- 《卸甲笔记》-PostgreSQL和Oracle的数据类型的对比系列四:大数据类型
- webservice系列1---基于web工程上写一个基本数据类型的webservice
- Delphi数据类型及转换(附:源码)
- Lua学习--基本语法&数据类型