Lua
沐阳掠影
此人太懒,但留下了个bug。
展开
-
Lua基础之弱引用
简述 一个table可以通过元表的__mode字段设置成弱引用模式,一般来说由三个模式: key是弱引用 value是弱引用 key和value都是弱引用 -- 设置a为key弱引用 a = {} b = {__mode = "k"} setmetatable(a, b) -- 设置a为value弱引用 a = {} b = {__mode = "v"} setmetatable(a,...原创 2020-01-18 23:00:10 · 924 阅读 · 1 评论 -
Lua基础之垃圾回收
Lua内存管理机制 Lua 使用的是垃圾自动回收机制。 Lua 主要是通过运行一个垃圾收集器来收集所有垃圾(Lua 中不会被访问到但还没销毁的对象)以完成自动内存管理的工作。 Lua的垃圾清理过程由4个阶段组成:标记、整理、清扫和收尾。 标记阶段:Lua先将“根集合”中的对象标记为“活跃”。根集合中的对象就是Lua可以直接访问的对象,它们是注册表中的对象和主线程对象。然后,Lua将任何程...原创 2020-01-18 21:35:59 · 501 阅读 · 0 评论 -
Lua基础之元表(metatable)
简介 Lua中的元表允许我们通过一个tableA特殊的键值自定义另一个tableB的行为,这些特殊的键值称为元方法,tableA则称为tableB的元表。 设置元表 setmetatable(table,metatable):对指定 table 设置元表,如果元表中存在 __metatable 键值,setmetatable 会失败。 getmetatable(table):...原创 2019-12-05 02:47:55 · 285 阅读 · 0 评论 -
Lua基础之dofile、loadfile、require的区别
loadfile 特点:只编译,不运行。 一个lua文件是作为一个代码块(chunk)存在的,其实质就是一个函数,loadfile编译代码成中间码并且返回编译后的chunk作为一个函数,而不执行代码 ,并且loadfile一旦出错不会抛出错误信息而是返回错误代号。一旦发生错误,loadfile会返回nil和错误信息,这样我们就可以自定义错误处理。 想要通过loadfile加载并执行,可...原创 2019-11-07 21:52:30 · 689 阅读 · 0 评论 -
Lua基础之模块与require
模块 Lua可以利用table实现模块加载 方法: 从require传入的参数中获取模块名或直接自定义变量名; 初始化一个空table; 在全局环境_G中添加模块名对应的字段,将空table赋值给这个字段; 在package.loaded中设置该模块; 设置环境变量。 例如: local moduleName = ... -- 模块名,可以在这里直接指定 local ...原创 2019-11-13 01:46:12 · 742 阅读 · 0 评论 -
Lua基础之运行环境搭建
1. 下载 下载地址:http://www.lua.org/ 可以直接下载已编译好的编译器、解释器和库文件(即Release版本),如图 也可以下载源码进行编译,源码的好处是我们可以看到底层的实现逻辑,然后进行改造和优化。 2. 编译 当文件下载完成后,源码位于/src里面,如图, 1. 打开Visual Studio,新建Win32...原创 2019-12-05 00:49:36 · 289 阅读 · 0 评论 -
Lua基础之环境
全局环境:Lua将其所有的全局变量保存在一个常规的table中组成全局环境,并通过全局变量_G进行引用。这种组织结构的优点在于可以像操作其他table一样操作这个table。有时我们想操作一个全局变量,而它的名称却存储在另一个变量中,或者需要通过运行时的计算才能得到,可以通过value = _G[varname]来获得动态名字的全局变量。 函数环境:Lua中的函数环境就是函数在执行时所见的...原创 2019-11-07 21:40:34 · 137 阅读 · 0 评论