
LUA学习笔记
文章平均质量分 81
活在阳光下
这个作者很懒,什么都没留下…
展开
-
Lua的类型与值
首先Lua是一种动态类型的语言。在Lua中一共有8种基础类型:nil(空)、boolean(布尔)、number(数字)、string(字符串)、userdata(自定义类型)、function(函数)、thread(线程)和table(表)。print(type("Hello world")) -->stringprint(type(10.4*3)) -->原创 2015-07-10 13:15:04 · 872 阅读 · 1 评论 -
Lua中的操作系统库
操作系统定义在table os 中,其中包含了文件操作函数、获取当前日期和时间的函数,以及一些其他与操作系统相关的功能。对于文件操作而言,这个库只提供了两个函数,一个用于文件改名的os.rename函数,另一个是用于删除文件的os.remove函数。1.时间和日期在lua中,函数time和date提供了所有的日期和时间的功能。如果不带任何参数调用time函数,它会以数字形式返回原创 2017-01-01 14:57:32 · 726 阅读 · 0 评论 -
lua文件操作详解
I/O库提供两种不同的方式进行文件处理:io表调用方式使用io表,io.open将返回指定文件的描述,并且所有的操作将围绕这个文件描述。io表同样提供三种预定义的文件描述io.stdin,io.stdout,io.stderr文件句柄直接调用方式即使用file:XXX()函数方式进行操作,其中file为io.open()返回的文件句柄。多数I/O函数调用失败时返回n转载 2017-01-07 16:35:57 · 7416 阅读 · 0 评论 -
lua string.byte 中文处理
在utf-8编码里,一个汉字通常占3个字节,在ansi(GBK)编码里,一个汉字占2个字节string.byte(char) > 127则代表是中文,如果是utf-8编码,则分割字符用string.sub(str , index , index+2),下一个字符位置为index+3string.byte(char)原创 2017-01-17 12:46:43 · 12066 阅读 · 0 评论 -
C++与Lua交互的C API
1、C API的介绍Lua是一种嵌入式的语言。即Lua不是一个单独运行的程序,而是一个可以链接到其他程序的库。通过C API就可以将Lua的功能合并入这些程序。与此同时,一个使用了Lua的程序可以在Lua环境中注册用C语言实现的新函数,由此,就可以向Lua中添加某些无法直接用Lua编写的功能。由于Lua和C++的数据结构和内存机制不一样,所以在交互的时候需要用到C API提供的一个虚拟栈,原创 2017-02-14 13:50:18 · 667 阅读 · 0 评论 -
lmathlib.c源码解析
Lua通过标准库实现了核心之外的功能,如math库,I/O库等。标准库由C语言函数实现,提供给Lua程序使用。Lua程序与C函数通过虚拟栈交互。Lua将参数压入栈中,C函数从栈中获取参数,并将结果压入栈中,C函数返回入栈的结果数量。C函数无需在压入结果前清空栈,Lua会在函数执行完成后从栈中获取结果并自动清空结果下的内容。/*** $Id: lmathlib.c,v 1.67.1.1原创 2017-03-06 17:52:05 · 788 阅读 · 0 评论 -
lstrlib.c源码解析
/*** $Id: lstrlib.c,v 1.132.1.5 2010/05/14 15:34:19 roberto Exp $** Standard library for string operations and pattern-matching** See Copyright Notice in lua.h*/#include #include #include #i原创 2017-03-07 14:40:00 · 1059 阅读 · 0 评论 -
解决lua中截取字符串(中英文混合)赋值失败的问题
UTF-8中一个汉字字符占三个字节,有时候我们截取的字符串中是中英文混合的字符串,在截取的时候可能机会得到我们意想不到的结果,打个比方说: local str = “hello中国” string.sub(str,1,6),这样子得到的结果就是hello? 这样的字符串是不能在quick-lua里面作为控件的strString()这个方法的,原因就是截取字符串的时候有些汉字截得不全,导致字符串乱码原创 2017-03-14 16:10:55 · 1492 阅读 · 0 评论 -
lua的unpack函数
在lua里面的unpack函数可以分解数组,并且返回数组里面的值。local array = {1,2, 3,nil,5}local a,b,c,d,e = unpack(array)print(a,b,c,d,e) --1,2,3,nil,5原创 2017-04-17 16:53:49 · 2176 阅读 · 0 评论 -
quick框架之functions详解
--[[Copyright (c) 2011-2014 chukong-inc.comPermission is hereby granted, free of charge, to any person obtaining a copyof this software and associated documentation files (the "Software"), to dea原创 2017-04-13 18:03:15 · 1369 阅读 · 0 评论 -
quick-lua中定时器的设计
该模块在框架初始化时不会自动载入--加载方式: local scheduler = require(cc.PACKAGE_NAME .. ".scheduler")local scheduler = {}local sharedScheduler = cc.Director:getInstance():getScheduler()function scheduler.sch原创 2017-04-18 17:05:59 · 2061 阅读 · 0 评论 -
quick框架之MyApp详解
本来是计划从这篇开始做个用一个小游戏教程来讲解quick的使用,但是发现群里很多童鞋对quick的框架还真是不了解其实这种不了解源自于没有认真的阅读quick的framework的代码,但无论是懒得读还是读不懂,结果都是会问各种基础的小白问题,于是我决定这个系列还继续讲解一些小白类的问题,而一些略微深入的使用以及我在做项目中得一些值得分享的东西我会单独开贴来写!好了,进入今天正题,在上一篇转载 2017-04-22 15:13:35 · 1559 阅读 · 0 评论 -
lua.h源码详解
/*** $Id: lua.h,v 1.218.1.5 2008/08/06 13:30:12 roberto Exp $** Lua - An Extensible Extension Language** Lua.org, PUC-Rio, Brazil (http://www.lua.org)** See Copyright Notice at the end of this fil原创 2017-05-15 16:50:44 · 2449 阅读 · 1 评论 -
lua_rawget,lua_rawset,lua_rawgeti,lua_rawseti
lua_gettable和lua_settable都可以操作table。void lua_gettable (lua_State *L, int index);把 t[k] 值压入堆栈, 这里的 t 是指有效索引 index 指向的值, 而 k 则是栈顶放的值。这个函数会弹出堆栈上的 key (把结果放在栈上相同位置)。 在 Lua 中,这个函数可能触发对应 "index" 事原创 2017-05-16 17:32:47 · 12706 阅读 · 0 评论 -
lualib.h详解
首先贴上代码:/*** Standard library header.** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h*/#ifndef _LUALIB_H#define _LUALIB_H#include "lua.h"#define LUA_FILEHANDLE "FILE*"原创 2017-06-25 17:11:48 · 2540 阅读 · 0 评论 -
UTF-8字符串在lua中的字长问题
UTF-8字符串在lua中每个字符的字长是不一样,中文,英文,其他字符。都有各自不同的字长,所以UTF-8也叫作变长字符。规则如下:1. utf8字符是变长字符2. 字符长度有规律UTF-8字符规律字符串的首个byte表示了该utf8字符的长度0xxxxxxx - 1 byte110yxxxx - 192, 2 byte1110yyyy原创 2017-07-19 13:01:45 · 956 阅读 · 0 评论 -
lua中的捕获(capture)
说到捕获,就要先说模式。说到模式,就要先说字符分类。字符分类是这个意思,%d代表数字,%a代表字母,%p代表标点字符,等等这样的就是字符分类,下面贴一张完整的表格再说模式,模式粗略来说可以理解为字符分类的组合成了一个模式。比如:%d%d/%d%d/%d%d%d%d可以搜索dd/mm/yyyy格式的日期。在模式中还存在一些魔法字符,它们具有特殊的含义。比如:( ) . % + -原创 2017-07-19 13:52:55 · 3061 阅读 · 0 评论 -
lua中的json.decode和json.encode解析
json.encode将表格数据编码为 JSON 字符串。格式:jsonString = json.encode(表格对象)用法示例:local str = json.encode({a=1,b="ss",c={c1=1,c2=2},d={10,11},100})echo(str) -- {"a":1,"b":"ss","c":{"c1":1,"c2":2},"d":[10,1转载 2017-07-26 18:03:48 · 45360 阅读 · 1 评论 -
Lua中的元方法总结
-- __add(a, b) for a + b-- __sub(a, b) for a - b-- __mul(a, b) for a * b-- __div(a, b) for a / b-- __mod(a, b)原创 2017-01-10 13:15:37 · 449 阅读 · 0 评论 -
Lua中的I/O库
I/O库为文件操作提供了两种不同的模型,简单模型(simple model)和完整模型(complete model)。简单模型假设有一个当前输入文件和一个当前输出文件,它的I/O操作均作用于这些文件,完整模型则使用显式的文件句柄。1.简单I/O模型简单I/O模型的所有操作都作用于当前两个文件。I/O库将当前输入文件初始化为进程标准输入(stdin)文件,将当前输出文件初始化为进程标准输出原创 2016-12-31 17:20:01 · 955 阅读 · 0 评论 -
LUA入门基础知识点
Lua执行的每段代码,例如一个源代码文件或在交互模式中输入一行代码,都可以称为一个程序块。一个程序块也就是一连串的语句或者是命令。另外和C不同的是,C中的没行语句在结束的时候都要输入英文符号的分好作为结束标志,但是在Lua中,几条连续的Lua语句之间并不需要分隔符,当然也可以出现。例如:a=1b=a*2a=1;b=a*2;a=1;b=a*2a=1;b=a*2;上面的这些都是原创 2015-07-10 11:57:57 · 1062 阅读 · 0 评论 -
Lua的表达式
Lua支持常规的算数操作符:二元的“+”、“-”、“*”、“/”、“^”、"%"。还有一元的“-”(负号)。对于实数来说,X%1的结果就是X的小数部分,而X-X%1就是其整数部分。类似的,X-X%0.01则是x精确到小数点后两位的部分。在Lua中提供了一下关系操作符: = == ~= 所有这些操作符的运算结果都是true或者false。==操作符主要是用于相等性测试,操作符~=用原创 2015-07-11 08:57:27 · 660 阅读 · 1 评论 -
lua dump函数
function dump(value, desciption, nesting) if type(nesting) ~= "number" then nesting = 3 end local lookupTable = {} local result = {} local function _v(v) if typ转载 2017-01-02 13:34:01 · 6709 阅读 · 0 评论 -
Luabit的位运作简介
Luabit的位运算Lua提供了bit库,可以对变量数据进行位运算,在某些应有场景,我们得确需要在lua中对数据进行位移,或是进行“与,或,非”,进制转换等操作。例如有这么一种较典型的情况,我们用一个32位的整数表示RGB颜色,32位整数,被分为4个部分,每个部分8bit, 8bit可表示的10进制数的范围是0~255。我们现在有一组RGB的颜色值: Alpha通道=8,转载 2017-01-02 13:41:22 · 9936 阅读 · 0 评论 -
Lua中的模块与包
从用户观点来看,一个模块就是一个程序库,可以通过require来加载。然后就得到了一个全局变量,表示一个table。这个table就像是一个命名空间,其内容就是模块中导出的所有东西,例如函数和常量。一个规范的模块还应使require返回这个table。例如,一个用户要想调用一个模块中的函数。最简单的方法是:require "mod"mod.foo()如果希望使用较短的模块名称,则可以原创 2017-01-03 16:37:06 · 3249 阅读 · 0 评论 -
Lua中的调试库
调试库由两类函数组成:自省函数和钩子(hook)。自省函数允许检查一个正在运行中程序的各个方面,例如它的活动函数栈、当前执行的行、局部变量的名称和值。钩子则允许跟踪一个程序的执行。在调试库中有一个重要的概念是栈层。一个栈层是一个数字,它表示某一时刻某个活动的函数,即一个已被调用但尚未返回的函数。调用调试库的函数是层1,调用这个函数的函数是层2,以此类推。1. 自省机制调试库中主原创 2017-01-03 17:23:33 · 2091 阅读 · 0 评论 -
Lua中实现sleep函数功能的4种方法
这篇文章主要介绍了Lua中实现sleep函数功能的4种方法,本文讲解了在一个死循环中设置一个跳出条件方法、调用系统的sleep函数法、Windows下ping命令法、socket库中select函数法4种方法,需要的朋友可以参考下一个不幸的消息是Lua中没有内置sleep函数,我们需要DIY。有4种方法可以实现sleep函数,如下:方法1复制代码代码如下转载 2017-01-03 17:38:42 · 11166 阅读 · 0 评论 -
lua中的setfenv和getfenv
设置函数环境——setfenv 当我们在全局环境中定义变量时经常会有命名冲突,尤其是在使用一些库的时候,变量声明可能会发生覆盖,这时候就需要一个非全局的环境来解决这问题。setfenv函数可以满足我们的需求。 setfenv(f, table):设置一个函数的环境 (1)当第一个参数为一个函数时,表示设置该函数的环境 (2)当第一个参数为一个数字时,为1代表转载 2017-01-03 23:05:20 · 5727 阅读 · 0 评论 -
Lua运算符优先级顺序
原创 2017-01-06 09:09:06 · 5884 阅读 · 1 评论 -
Lua中函数与面向对象编程的基础知识整理
函数1. 基础知识调用函数都需要写圆括号,即使没有参数,但有一种特殊例外:函数若只有一个参数且参数是字面字符串或table构造式,则圆括号可有可无,如dofile 'a.lua',f{x=10, y=20}。Lua为面向对象式的调用提供冒号操作符的特殊语法,如o.foo(o, x)等价于o:foo(x)。和Javascript类似,调用函数时提供的实参数量可以与形参数量不同,若实参转载 2017-01-07 16:19:41 · 384 阅读 · 0 评论 -
简单谈谈lua和c的交互
介绍lua和c的亲密接触,靠的是一个虚拟栈。lua通过这个虚拟栈来实现和c之间值的互传。栈上的每一个元素是一个lua值(nil,number,string...)。当lua调用c函数的时候,这个函数会得到一个新的栈,这个栈独立于c函数本身的栈,也独立于lua自己的栈。它里面包含了lua要传给c的所有参数,然后c函数会把返回的结果放入这个栈中返回给调用者。对于栈的查询操作,如转载 2017-01-07 16:48:11 · 711 阅读 · 0 评论 -
Lua中字符串库的一些操作
在Lua里面程序只能创建字符串常亮、链接字符串及获取字符串的长度。但是呢,它无法作进一步的操作,就是说,它无法提取子串或者检索字符串的内容。在Lua里面真正的字符串操作能力来自于字符串库(String)。1.基础字符串函数s="hello lua"string.len(s) --返回字符串的长度string.rep(s) --返回字符串重复n次的结果s:rep(n)原创 2016-12-30 14:52:12 · 13896 阅读 · 0 评论 -
Lua中的模式
在Lua中有很多字符分类:.所有字符%a字母%c控制字符%d数字%l小写字母%p标点符号%s空白字符%u大写字母%w字母和数字字符%x十六进制数字%z内部表示为0的字符上面这些分类的大写形式表示他们的原创 2016-12-30 18:21:33 · 3315 阅读 · 1 评论 -
Lua中有关字符串的进阶操作
1.捕获(capture)捕获功能就是根据一个模式从目标字符串中抽出匹配于该模式的内容。在指定捕获的时候,应将模式中需要捕获的部分写到一对圆括号中。对于具有捕获的模式,函数string.match会将所有捕获到的值作为单独的结果返回。也就是说,它会将目标字符串切成多个捕获到的部分:pair="name = Anna"key,valeu=string.match(pair,"(%a+)原创 2016-12-31 13:51:28 · 1024 阅读 · 0 评论 -
Lua基础coroutine(协程)
1.创建协程协程和多线程下的线程类似:有自己的堆栈,自己的局部变量,有自己的指令指针,但是和其他协程程序共享全局变量等信息。线程和协程的主要不同在于:多处理器的情况下,概念上来说多线程是同时运行多个线程,而协程是通过协作来完成,任何时刻只有一个协程程序在运行。并且这个在运行的协程只有明确被要求挂起时才会被挂起。[plain] view plain copy--创建协程转载 2016-12-31 16:11:41 · 705 阅读 · 0 评论 -
Lua字符串(string)
字符串函数lua中字符串索引从前往后是1,2,……,从后往前是-1,-2……。string库中所有的function都不会直接操作字符串,只返回一个结果。1,计算字符串长度 string.len() 例如:string.len("abcd");--42,返回字符串s的n个拷贝string.rep()例如:string.rep("abcd",2)--abcdabcd转载 2016-12-31 16:13:01 · 855 阅读 · 0 评论 -
Lua基础之math(数学函数库)
Lua5.1中数学库的所有函数如下表:math.pi 为圆周率常量 = 3.14159265358979323846abs取绝对值math.abs(-15)15acos反余弦函数math.acos(0.5)1.04719755asin反正弦函数math.asin(0.5)转载 2016-12-31 16:13:40 · 5439 阅读 · 0 评论 -
编译加密lua代码
这里执行以下脚本就可以了。内容如下:cocos luacompile -s src/ -d src_luac/ -e -k etfbg55ds -b 78dferg --disable-compile参数解析如下:原创 2017-07-26 18:21:54 · 1423 阅读 · 0 评论