【lua学习】2.数据类型
【lua学习】2.数据类型
- Lua中的数据类型
- 关于TValue自顶向下分析
- TValue表示所有的Lua数据结构并带一个类型字段
- Value表示所有的Lua数据结构
- GCObject表示所有需要进行垃圾回收的数据结构
- GCheader表示需要GC的数据结构最开始的部分
Lua中的数据类型
宏名 (见lua.h) | 宏值 | 类型 | 对应数据结构 |
---|---|---|---|
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 |
关于TValue自顶向下分析
TValue表示所有的Lua数据结构并带一个类型字段
(lobject.h) TValue
typedef struct lua_TValue {TValuefields;
} TValue;
(lobject.h) TValuefields
//Value就是一个可以代表任何值类型的union
//上述宏定义中,tt表示类型,也就是上面表格列举的宏
#define TValuefields Value value;int tt
Value表示所有的Lua数据结构
(lobject.h) Value
typedef union {GCObject* gc;//存需要gc类型的值void* p;//存lightuserdata类型的值lua_Number n;//存数字类型的值int b;//存boolean类型的值
} Value;
GCObject表示所有需要进行垃圾回收的数据结构
(lstate.h) GCObject
union GCObject {GCHeader gch;//看下面定义union TString ts;//LUA_TSTRING 4union Udata u;//LUA_TUSERDATA 7union Closure cl;//LUA_TFUNCTION 6struct Table h;//LUA_TTABLE 5struct Proto p;struct UpVal uv;struct lua_State th;//LUA_TTHREAD 8
};
GCheader表示需要GC的数据结构最开始的部分
(lobject.h) GCheader
typedef struct GCheader {CommonHeader;//看下文
} GCheader;
(lobject.h) CommonHeader
//任何和需要进行垃圾回收的Lua对象,必然以CommonHeader为最开始的部分
//next 指向下一个GC链表的成员,todo 后面再说
//tt 表示的数据类型,也就是开始表格定义的宏
//marked GC相关的标记为,todo 后面再说
#define CommonHeader GCObject* next; lu_byte tt; lu_byte marked
(lobject.h) gcvalue宏 获取对象的gc部分
//check_exp看下文
//iscollectable看下文
#define gcvalue(o) check_exp(iscollectable(o), (o)->value.gc))
(llimits.h) check_exp 条件成了才展开宏
//不判断c的条件,直接展开宏e
#define check_exp(c,e) (e)
(lobject.h) iscollectable
//判断一个对象是否需要GC,只需要获得其类型宏值>=字符串即可
#define iscollectable(o) (ttype(o)>=LUA_TSTRING)
//ttype看下文
(lobject.h) ttype
//看ttype
//获取一个对象的类型
#define ttype(o) ((o)->tt)
【lua学习】2.数据类型相关推荐
- Lua学习篇③——数据类型
学过C\C++.C#等主流编程语言的人都清楚,这些语言中对数据类型都有明确的定义,整型必须定义为int.字符串必须定义为string等.而Lua对变量类型的定义是动态的,也就是说对于一个变量,我们不需 ...
- Python 和 Lua 学习比较 一
好记性不如烂笔头. 作的笔记以后也能来再看看. python有多种语言写成的版本,这里只记录C/C++写的版本,lua本身是使用标准C/C++编写的. 所以各位同学知道C的强大了吧,我觉得作为程序员, ...
- 从Lua学习JavaScript(一)
学习 Lua 对于了解 Javascript 的人来说就是小菜一碟,Tyler Neylon 写了三篇文章来解释其中的原因,这是其中的第一篇. 这是通过 Javascript 来学习 Lua 系列文章 ...
- Lua语言基础入门 (Lua学习一)
Lua语言快速入门 这篇博客主要是简单的讲解一下Lua的基础知识,涉及的东西不是很深,提供一些学习的思路,对具体的技术不展开介绍,网上资料很多写的都比我好,仅仅为了使用Lua,而不是做基于Lua的项目 ...
- Lua学习笔记6:C++和Lua的相互调用
曾经一直用C++写代码.话说近期刚换工作.项目组中的是cocos2dx-lua,各种被虐的非常慘啊有木有. 新建cocos2dx-lua项目.打开class能够发现,事实上就是C++项目啦,只是为什么 ...
- Redis学习笔记 - 数据类型与API(1)Key
Redis学习笔记 - 数据类型与API(1)Key Key相关命令 1. 常用命令 命令 含义 时间复杂度 keys 查找所有符合给定模式 pattern 的 key O(N), N 为数据库中 k ...
- lua学习:使用Lua处理游戏数据
在之前lua学习:lua作配置文件里,我们学会了用lua作配置文件. 其实lua在游戏开发中可以作为一个强大的保存.载入游戏数据的工具. 1.载入游戏数据 比如说,现在我有一份表单: data.xls ...
- Lua学习笔记(2)
前段时间忙于其他事,没有继续Lua的学习,现在继续我们的Lua学习吧. 首先先推荐一本书<Programming in Lua>中文版名称<Lua编程>,这本书从最基础的部分开 ...
- Lua 学习笔记(一)
Lua学习笔记 1.lua的优势 a.可扩张性 b.简单 c.高效率 d.和平台无关 2.注释 a.单行注释 -- b.多行注释 --[[ --]] 3.类型和 ...
最新文章
- 为treeview添加客户端事件
- Chrome浏览器取代火狐的十大理由
- sql server 判断是否存在数据库,表,列,视图
- boost::mpl模块实现empty相关的测试程序
- 解析PHP实现多进程并行执行脚本
- 7 个让您需要渐进式 Web 应用程序做项目开发的理由
- postgresql的特点_PG:PostgreSQL的一些简单操作
- Java基础知识——Sting、StringBuild、StringBuffer的区别
- (计算机显示器主屏幕区域)桌面造句,部编版《语文园地四》教学反思模板(11页)-原创力文档...
- js库编写的环境和准备工作
- java定时任务Quartz整理
- vant 个人中心头像修改
- PHP连接msSQL数据库方法
- 【MindSpore易点通】一站式指南
- jsdroid 教程_电气设计编程视频教程,涉及PLC、电气绘图、仿真等共400多份资料...
- 本人常用软件(工具)
- 如何判断如何判断RS232线是直连还是交叉连线
- 一文读懂keepalive的工作原理
- 机器视觉系列(三)——电气部分
- 搭建个人博客工具推荐