lua
zhaixh_89
这个作者很懒,什么都没留下…
展开
-
Lua元表理解
之前接触lua时看到了元表的使用,但是一直一知半解,借此机会对自己的理解做一下总结,方便日后回顾元表本质上来说是一种用来存放元方法的table。我们可以通过对应的key来得到value值,作用就是修改一个值的行为(更确切的说,这是元方法的能力),需要注意的是,这种修改会覆盖掉原本该值可能存在的相应的预定义行为。1. lua中的每个值都可以有一个元表,只是table和userdata可以有各...原创 2018-11-20 15:19:48 · 9674 阅读 · 3 评论 -
如何在c函数中保存状态
通常,我们在c函数中想要保存一些状态数据无非两种方式,全局变量或者静态变量,这些数据一般比程序本身生存期更久,但是在lua中这么做并不聪明,首选我们无法在c变量中保存一个lua对象,另外一旦使用了全局变量或者静态变量,那么该变量也就无法用于多个lua状态了。熟悉的lua人都知道,对于非局部数据,lua的存放方式有全局变量、函数换将、非局部变量也叫closure(闭包),CAPI特提供了3种方式...原创 2018-12-27 11:16:16 · 486 阅读 · 0 评论 -
双向队列的实现
c++中使用队列的话有queue(单项队列)、deque(双向队列),但在lua中并没有提供给我们可直接使用的这类数据结构,不过lua中有一个近乎万能的数据类型table,他可以实现其他语言中各种类型,今天在此先分享下双向列表的lua实现,原理就是保存一张表的首尾端索引,每次增删的时候修改下,并将push进来的值以索引为key保存起来,取值的时候再以索引为键取出即可,代码如下: --双向...原创 2018-12-10 11:33:21 · 796 阅读 · 0 评论 -
require加载模块
Lua 的模块是由变量、函数等已知元素组成的 table,因此创建一个模块很简单,就是创建一个 table,然后把需要导出的常量、函数放入其中,最后返回这个 table 就行,Lua提供了一个名为require的函数用来加载模块。要加载一个模块,只需要简单地调用就可以了,执行以下语句 require 会返回一个由模块常量或函数组成的 table,并且还会定义一个包含该 table 的全局变量。...原创 2018-12-15 14:38:36 · 910 阅读 · 0 评论 -
宿主语言(c++)调用Lua原理(lua的堆栈)
本文主要介绍宿主语言是如何一步步调用lua的,这里选取c++作为宿主语言,以前使用cocos调用lua的时候只知道是通过lua虚拟机中的栈来实现的一直没有深入理解,借着这次重新使用的机会,深入理解并作出总结,做一记录(记性不好,可以常回来看看巩固下)先来理一理lua虚拟机的栈:我画了一张表说明下,此时lua栈里有9个元素,lua的虚拟机堆栈可以向上索引,也可以向下索引,一般使用向下索引多一...原创 2018-12-04 22:23:04 · 828 阅读 · 0 评论 -
Lua中常用的便捷写法
大多数人在使用lua之前都可能学过别的语言,如c/c++, java, c#等, 使用lua像我一样都是现学现用,对很多东西都是知其然而不知其所以然,近期决定深入挖掘lua相关知识,将一些lua的良好写法或者简洁的写法做一汇总关于变量:1、变量初始化学过c的人基本都有一个好的习惯,那就是变量使用之前都会初始化为null或者0,并且一般都会和其他变量一起放在函数最前面,等到用的时候直接使用会...原创 2018-12-04 10:58:47 · 963 阅读 · 0 评论 -
Lua面向对象实现
lua中没有类的概念,一般所说的类其实就是一个table实现的。关于lua类有两种实现方式第一种是在cocos2d-x引擎目录下图示文件function clone(object) local lookup_table = {} local function _copy(object) if type(object) ~= "table" then ...原创 2018-11-22 20:41:05 · 761 阅读 · 0 评论 -
Lua中rawset 函数使用
当我们只想单纯的调用table里的字段或者给table字段赋值时,我们可以通过rawget函数来忽略元表的__index作用,只从table中查找例如: local father = { --house=1, sayHello = function() print("大家好,我是father."); end } ...原创 2018-11-20 16:55:56 · 5973 阅读 · 2 评论 -
Lua元方法__newindex
上篇博客我们讲了__index用于查询,这一节我们讲_newindex , _newindex 元方法用来对表更新,__index则用来对表访问 。当你给表的一个缺少的索引赋值,解释器就会查找__newindex 元方法:如果存在则调用这个函数而不进行赋值操作。我们先来看下简单的赋值操作father = { house=1, sayHello = function()...原创 2018-11-20 16:21:33 · 243 阅读 · 0 评论 -
table序列化成json格式文件
在游戏开中我们经常会有将数据转换为一个字节流或者字符流的需求,然后将其存储到一个文件或者通过网络连接发送出去,在lua中对于保存在table中的数据我们可以简单序列化成json文件保存到本地--无环table序列化为json格式保存到文件local file = io.open("1.json", "w")if(file == nil) then print("open fil...原创 2018-12-11 13:48:54 · 1224 阅读 · 0 评论