随笔分类 -  Lua

摘要:尾调用本文将以lua语言来描述。尾调用是函数式编程的一个概念,它是指某个函数的最后一步是调用另一个函数,例如:function f(x) return g(x) -- 尾调用end尾调用不一定出现在函数尾部,只要是最后一步操作即可,例如:function f(x) if (x > ... 阅读全文
posted @ 2015-06-12 14:29 如果的事 阅读(619) 评论(1) 推荐(0)
摘要:Lua 之 userdata在Lua中可以通过自定义类型(user data)与C语言代码更高效、更灵活的交互,从而扩展Lua能够表达的类型。full userdatafull userdata 表示一个原始的内存块,可以存储任何东西,它是一个类似于table的object,必须事先创建(也可以被垃... 阅读全文
posted @ 2014-11-06 13:35 如果的事 阅读(13904) 评论(0) 推荐(0)
摘要:Lua 与 C 的交互Lua是一个嵌入式的语言,它不仅可以是一个独立运行的程序,也可以是一个用来嵌入其它应用的程序库。C API是一个C代码与Lua进行交互的函数集,它由以下几部分构成:1、 读写Lua全局变量的函数;2、 调用Lua函数的函数;3、 运行Lua代码片段的函数;4、 注册C函数后可以... 阅读全文
posted @ 2014-10-29 16:00 如果的事 阅读(10467) 评论(0) 推荐(2)
摘要:标准os库os.rename(oldname, newname)文件重命名;os.remove(filename)删除一个文件os.execute(cmd)os.execute可运行一条系统命令,类似于C语言的system函数。os.execute("mkdir /tmp/cq")os.exit(c... 阅读全文
posted @ 2014-10-28 15:28 如果的事 阅读(15156) 评论(0) 推荐(0)
摘要:标准string库基础字符串函数string.len(s)返回一个字符串的长度,例如print(string.len("hello world")) -- 11string.rep(s, n)返回一个新的字符串,该字符串是参数s重复n次得到的结果,例如print(string.rep("go", 3... 阅读全文
posted @ 2014-10-27 21:33 如果的事 阅读(1451) 评论(0) 推荐(0)
摘要:弱引用table与python等脚本语言类似地,Lua也采用了自动内存管理(Garbage Collection),一个程序只需创建对象,而无需删除对象。通过使用垃圾收集机制,Lua会自动删除过期对象。垃圾回收机制可以将程序员从C语言中常出现的内存泄漏、引用无效指针等底层bug中解放出来。我们知道P... 阅读全文
posted @ 2014-10-27 15:38 如果的事 阅读(4927) 评论(0) 推荐(0)
摘要:Lua 之面向对象编程Lua并不是为面向对象而设计的一种语言,因此,仅从原生态语法上并不直接支持面向对象编程,但Lua的设计中仍然包含了很多面向对象的思想,理解它们也更有助于理解Lua自身的一些高级机制。对象Lua中的table就是一种对象,它可以有函数字段。在面向对象(Object Oriente... 阅读全文
posted @ 2014-10-25 15:29 如果的事 阅读(1235) 评论(0) 推荐(0)
摘要:Lua 之数据结构数组通过整数下标访问的table中的元素,即是数组,下标默认从1开始。一个创建二维数组的例子:mt = {}for i = 1, 10 do mt[i] = {} for j = 1, 10 do mt[i][j] = 0 end end链表l... 阅读全文
posted @ 2014-10-24 16:48 如果的事 阅读(704) 评论(0) 推荐(0)
摘要:Lua之metatable一、元表Lua中的每个值都有一套预定义的操作集合,也可以通过metatable(元表)来定义一个值的行为,metatable包含了一组meatmethod(元方法)。Lua中的每个值都有一个metatable,table和userdata可以有各自独立的metatable,... 阅读全文
posted @ 2014-10-23 15:26 如果的事 阅读(1175) 评论(0) 推荐(0)
摘要:Nginx一致性哈希模块的Lua重新实现技术背景:最近在工作中使用了nginx+redis 的架构,redis在后台做分布式存储,每个redis都存放不同的数据,这些数据都是某门户网站通过Hadoop分析出来的用户行为日志,key是uid,value是user profile,每小时更新量在500-800万条记录,而这些记录一旦生成,我需要在5分钟左右的时间完成所有导入过程。首先,我在nginx中使用了第三方模块HttpUpstreamConsistent来做负载均衡策略,针对不同用户(uid)选取不同的backend redis: upstream somestream { c... 阅读全文
posted @ 2014-04-02 16:26 如果的事 阅读(3684) 评论(2) 推荐(0)
摘要:Lua协程协同程序(coroutine)与多线程情况下的线程比较类似:有自己的堆栈、局部变量、指令指针,但与其它协程共享全局变量等很多信息。协程类似一种多线程,但与多线程还有很多区别: 1. 协程并非os线程,所以创建、切换开销比线程相对要小。 2. 协程与线程一样有自己的栈、局部变量... 阅读全文
posted @ 2014-03-30 20:23 如果的事 阅读(2608) 评论(0) 推荐(0)
摘要:Lua的环境、编译等Lua命令行lua命令行选项:-i:进入交互式-e:执行lua代码-l:加载库文件例如使用下面的命令启动lua解释器,可以重新定义lua提示符。lua -i -e "_PROMPT=' try>'"在交互模式下,如果要打印任何表达式的值,可以用等号开头,并跟随一个表达式,例如:>... 阅读全文
posted @ 2014-03-30 19:28 如果的事 阅读(1150) 评论(0) 推荐(0)
摘要:Lua函数之二Lua中函数的两个重要特性:1、函数和其他类型(如number、string)一样,可以存放在变量中,也可以存放在table中,可以作为函数的参数,还可以作为函数的返回值。2、嵌套的函数可以访问其外部函数中的局部变量——闭包。例如:local foo = function(x) ret... 阅读全文
posted @ 2014-03-30 18:36 如果的事 阅读(593) 评论(0) 推荐(0)
摘要:LUA函数之一函数声明:function foo(arguments) statementsend1、函数调用调用函数的时候,如果参数列表为空,必须使用()表明是函数调用,例如:os.date()当函数只有一个参数并且这个参数是字符串或者table构造器的时候,可以省略函数调用操作符"()",例如... 阅读全文
posted @ 2014-03-30 14:28 如果的事 阅读(862) 评论(0) 推荐(0)