
Lua语际穿越
booirror
享受编程的乐趣
展开
-
lua学习之类型与值
Lua是动态类型语言,变量不要类型定义lua中有8个基本类型:nil,boolean,number,string, userdata,function,thread,table用函数type可以测试给定变量或者值的类型1.nilnil类型只有一个值,那就是nil。一个全局变量没有被赋值以前默认为nil,给全局变量赋值nil可以删除该变量原创 2014-06-08 23:41:05 · 1413 阅读 · 0 评论 -
Lua打印table
先聊聊独立blog。大部分写blog的程序员都希望有个独立博客,尤其是牛人。他们不愿忍受csdn,cnblog带来的限制,跟不愿跟一群小白为伍。于是乎大牛们纷纷离开了见证他成长的博客社区,自己搭建了独立博客。其实如果仅仅是写给自己看,独立博客也没啥不好的。只是你的blog访问量会明显低于以前,因为很多以前的关注者不一定会进入你新blog。更重要的事,如果你blog不是很原创 2015-07-27 00:45:04 · 9371 阅读 · 2 评论 -
C语言调用Lua函数
记得上学时,初中英文课本中,上网叫做surfing the internet,中文叫网上冲浪。那个时期,人们经常称互联网为赛博空间。如今工作了,大量的零碎时间用于上微博,知乎,QQ,这些碎片化的阅读让人读起来轻松,也能获取些粗浅的信息。然而它们是消耗时间的黑洞,时间就这样一分一秒地飞逝,年末的时候,知乎会告诉你回答了多少问题,阅读了相当于一部《红楼梦》那么多的文字。只是当你静下来一想,这些浅阅读并原创 2014-10-12 23:26:23 · 8863 阅读 · 0 评论 -
韩国美女连连看核心算法
精选的韩国美女,看着一个个沉鱼落雁,闭月羞花之貌的美人,着实令人心神俱醉,目不暇接。“媚眼含羞合,丹唇逐笑开”,“俊眉修眼,顾盼神飞”,如此一个小游戏,却让你赏尽天下美人,岂不快哉。一饱眼福之余,也让人好奇这背后的逻辑。欲知背后的算法如何,且听我细细分析。大神说,talk is cheap, show me the code.这个世界是由代码构成的,一切基于co原创 2015-09-29 00:18:19 · 2233 阅读 · 0 评论 -
用Cocos Quick+Lua写的射击游戏——月球战士(MoonWarriors)附源码
越来越多的公司选择用脚本来开发手游了,Cocos2d-x支持JavaScript和Lua。和C++相比,用脚本写起来更随心所欲。尽管C++11之后,写起代码来更顺手了,但还是比不上脚本的方便啊。Lua的table,闭包,语法简单等,让你越用越喜欢。C++要想用的顺手,没几年功夫是很难的。Linux之父Linus Torvalds说过“C++写的代码烂,是因为一群不合格的C++程序员在用它”。coc原创 2015-11-04 23:27:42 · 3600 阅读 · 2 评论 -
Weak tables and Finalizer in Lua(Lua的弱表)
在lua里,任何全局变量都不是垃圾,即使不再使用它们弱表是机制在于告诉lua,这是一个弱引用,对象可以回收,垃圾回收器可以忽略他。如果一个对象仅仅只被弱表引用,那么lua会回收他table的key,value默认是强引用弱表分为三种,__mode="k", __mode = "v", __mode="kv"只有对象才可以被回收,值不可以回收string是值弱表可以用于记忆函数Finalizer关联原创 2016-08-21 12:12:00 · 416 阅读 · 0 评论 -
实现ipairs和pairs功能
t = {3, 4, 5}local ipairsIter = function(t, i) i = i + 1 local v = t[i] if v then return i, v endendlocal function myIpairs(t) return ipairsIter, t, 0endfor k, v in myIpairs(t) d原创 2016-09-12 16:02:11 · 2056 阅读 · 0 评论 -
明明白白lua的协程(coroutine)
协程和多线程下的线程类似:有自己的堆栈,自己的局部变量,有自己的指令指针,但是和其他协程程序共享全局变量等信息。线程和协程的主要不同在于:多处理器的情况下,概念上来说多线程是同时运行多个线程,而协程是通过协作来完成,任何时刻只有一个协程程序在运行。并且这个在运行的协程只有明确被要求挂起时才会被挂起你可以使用coroutine.create来创建协程:co = coroutine.c原创 2014-10-05 23:07:11 · 28752 阅读 · 0 评论 -
5分钟学会Lua编程(简明教程)
关键字:and break do else elseif end false goto for function if in local nil not or repeat return then true until while标识符有字母,数字,下划线组成,非数字开头,_这个标识符Lua特意留给用户使用。原创 2016-11-23 17:15:18 · 7336 阅读 · 3 评论 -
Lua与面向对象
影响一个人最好的方式不是语言本身,而是语言背后所表露的情感。待续原创 2016-11-24 16:19:19 · 730 阅读 · 0 评论 -
大数big number的加减运算
以下是Lua的实现:function plus(str1, str2) local increase = 0 local t = {} local max = math.max(string.len(str1), string.len(str2)) for i = 0, max-1 do local ch1 = string.sub(s原创 2016-11-25 14:37:34 · 6102 阅读 · 0 评论 -
lua函数精讲(一)
函数的用途:1.完成指定的任务,这种情况下作为调用语句使用。2.计算并返回值,这种情况下,函数作为赋值语句的表达式使用。函数的参数为空,必须使用()表示函数调用。例外:当函数只有一个参数,并且这个参数是字符串或表构造时,()是可选的。lua提供了面向对象调用函数的语法o:foo(x)与o.f(o,x)是等价的。lua函数的实参与形参的匹配与赋值语句类似,原创 2014-09-20 23:48:35 · 4686 阅读 · 0 评论 -
Lua,Lua API,配置文件
想像一个场景:你的c程序需要有一个窗口,你想让用户可以自定义窗口大小。方法很多,比如使用环境变量,或键值对的文件。不管怎样,你需要解析它。使用lua配置文件是个不错的选择。首先,你可以定义如下的配置文件:--define window sizewidth = 100height = 50然后,我们写个函数来解析它,使用lua API 来指导lua解析配置。,原创 2014-10-12 15:53:06 · 2054 阅读 · 1 评论 -
lua中的迭代器与泛型for
任何一种结构,只要允许你遍历集合中所有元素的都可称之为迭代器。lua中常常使用函数来描述迭代器,每次调用该函数都返回集合的下一个元素。每一个迭代器都需要保存一些状态来知道当前处于什么位置和如何进行下一次迭代。对于这样的任务,闭包提供了很好的机制来完成。一个典型的闭包结构包含两个函数:一个是闭包自身,一个是创建闭包的工厂。例如,我们可以写过简单的list迭代器,让他仅仅返回值。fun原创 2014-10-03 22:11:19 · 3515 阅读 · 0 评论 -
lua学习之起点
为什么学lua先占位,晚上再写1.1 ChunksChunk 是一系列语句,lua执行d每一块语句,比如一个文件或者交互模式下的每一行都是一个Chunk。一个Chunk可以是一个语句,也可以是一系列语句的组合。可以是函数,Chunk可以很大每个语句结尾的分号(;)是可选的。如果同行又多个语句,最好用;分开-l会调用 requirelua -la -lb原创 2014-08-20 13:59:07 · 1259 阅读 · 0 评论 -
lua的table库中常用的函数
lua提供了一些辅助函数来操作table。例如,从list中insert和remove元素,对array的元素进行sort,或者concatenate数组中的所有strings。下面就详细地讲解这些方法。insert and removetable.insert将一个元素插入到指定位置,例如:t = {1, 2, 3}table.insert(t, 1, 4}t的结果将原创 2014-10-06 16:04:36 · 29270 阅读 · 0 评论 -
lua的ipair与pair究竟有什么区别
先看看官方手册的说明吧:pairs (t)If t has a metamethod __pairs, calls it with t as argument and returns the first three results from the call.Otherwise, returns three values: the next function, the table t, a原创 2014-09-12 00:21:26 · 8624 阅读 · 0 评论 -
lua的编译,执行和调试
dofile读入文件编译并执行,真正完成功能的函数是loadfile;与dofile不同,loadfile仅仅是编译代码成中间码,并且把编译后的chunk作为函数返回。如果发生错误,返回nil和错误信息。我们可以这么定义dofile:function dofile(filename) local f = assert(loadfile(filename)) return原创 2014-10-04 12:48:11 · 3101 阅读 · 0 评论 -
lua学习之table类型
关系表类型,这是一个很强大的类型。我们可以把这个类型看作是一个数组。只是 C语言的数组,只能用正整数来作索引; 在Lua中,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。同样,在C语言中,数组的内容只允许一种类型;在 Lua中,你也可以用任意类型的值来作数组的内容,nil也可以。基本介绍注意三点: 第一,所有元素之间,总是用逗号 "," 隔开; 第二原创 2012-08-18 22:23:27 · 63011 阅读 · 2 评论 -
lua学习之表达式
3.1 算术运算符二元运算符:+-*/ ^ (加减乘除幂)一元运算符:-(负值)这些运算符的操作数都是实数。3.2 关系运算符 = == ~===,~=如果两个值d类型不同,则不等lua通过引用比较tables,userdata,functions,也就是当且仅当表示同一个对象时才相等。3.3 逻辑运算符and or nota and b --原创 2014-08-27 13:37:19 · 1177 阅读 · 0 评论 -
Lua调用C函数
在上一篇文章(C调用lua函数)中,讲述了如何用c语言调用lua函数,通常,A语言能调用B语言,反过来也是成立的。正如Java与c语言之间使用JNI来互调,Lua与C也可以互调。当lua调用c函数时,使用了和c调用lua中的同一种栈,c函数从栈中得到函数,然后将结果压入栈中。为了区分返回结果和栈中的其他值,每一个函数返回结果的个数。这里有个重要的概念:这个栈不是全局的结构,每个原创 2014-10-14 22:04:31 · 1938 阅读 · 0 评论 -
Lua打印table升级版
原Lua打印table有个很致命的问题,递归深度过大会导致栈溢出(stack overflow)。首先,需要明白,lua里出现栈溢出有以下情况:“too many arguments”,“assume array is smaller than 2^40 “,“string slice too long”,“too many captures”,原创 2015-08-04 19:45:31 · 1263 阅读 · 0 评论 -
lua学习之基本语法
赋值语句lua可以对多个变量同时赋值,变量列表,值列表的各个元素用逗号隔开。赋值语句右边会依次给左边的变量。a, b = 10, 2*x a = 10; b=2*x;lua会先计算右边所有的值,然后再执行赋值操作。x, y = y, x -- swap x for y当同时赋值遇到变量个数与值个数不一致时,a. 变量个数 > 值的个数 不足的布n原创 2014-09-05 12:57:44 · 2082 阅读 · 0 评论 -
lua函数精讲(二)
Lua中的函数带有词法定界的第一类值。第一类值: 在Lua中,函数和其他值(数值,字符串)一样,函数可以被存放在变量中,也存放在表中, 可以作为函数的参数,还可以作为函数的返回值。词法定界:被嵌套的函数可以访问他外部函数的变量。lua的函数也可以是匿名的,当我们提到函数名时,实际上是说一个指向函数的变量。闭包词法界定加上第一类函数是一个功能强大的概念。原创 2014-10-03 18:06:39 · 4797 阅读 · 0 评论 -
lua写排序算法
早在12年的时候,学过一个月的lua,当时看的是《programming in lua》,一直没用过,然后就忘了。现在我下定决心重新学习它。时间久了,对编程的热情也随之消失殆尽,很难找回当初编程的乐趣了。近来一放假就玩英雄联盟,太浪费时间,玩个十来局一天就过去了,浑浑噩噩的,这实在不是我想过的。所以,今天我把它卸载了。如果你也是英雄联盟玩家,希望你不要沉迷其中。从事游戏开发原创 2014-09-14 18:25:25 · 7732 阅读 · 0 评论 -
大数相乘
local bignum = {}function bignum.len(num) return string.len(num)endfunction bignum.splitAt(num, pos) local low = string.sub(num, -pos) local high = string.sub(num, 1, -pos原创 2016-11-25 18:42:00 · 477 阅读 · 0 评论