
小巧的Lua
文章平均质量分 79
soloist
这个作者很懒,什么都没留下…
展开
-
在Lua中如何动态生成两个函数的复合函数
Lua是一种动态类型语言,变量名可以在运行时绑定到任意类型的值上。Lua从函数式编程语言中借鉴了许多思想,这体现在Lua的基本类型中除了有number,string等其它语言中常见的基本类型外,还有函数(function)。这意味着函数: 可以用变量命名; 可以提供给函数作为参数; 可以作为函数的返回值; 可以包含在数据结构中。下面我们利用函数在Lua中作为"一等公民"的身份,来实现原创 2004-12-20 18:55:00 · 5254 阅读 · 0 评论 -
Lua的function、closure和upvalue
Lua中的函数是一阶类型值(first-class value),定义函数就象创建普通类型值一样(只不过函数类型值的数据主要是一条条指令而已),所以在函数体中仍然可以定义函数。假设函数f2定义在函数f1中,那么就称f2为f1的内嵌(inner)函数,f1为f2的外包(enclosing)函数,外包和内嵌都具有传递性,即f2的内嵌必然是f1的内嵌,而f1的外包也一定是f2的外包。内嵌函数可以原创 2005-03-14 12:01:00 · 5543 阅读 · 0 评论 -
Lua的多任务机制——协程(coroutine)
并发是现实世界的本质特征,而聪明的计算机科学家用来模拟并发的技术手段便是多任务机制。大致上有这么两种多任务技术,一种是抢占式多任务(preemptive multitasking),它让操作系统来决定何时执行哪个任务。另外一种就是协作式多任务(cooperative multitasking),它把决定权交给任务,让它们在自己认为合适的时候自愿放弃执行。这两种多任务方式各有优缺点,前者固有原创 2005-03-24 22:37:00 · 38906 阅读 · 8 评论 -
Lua的语法是无歧义的吗?
Lua5.0的语法非常简洁,这从参考手册中的语法定义的规模(转换成标准BNF形式大概有100个左右的产生式)可以看出。不过简洁归简洁,它却不完全是无二义性的。下面将用具体例子揭示什么样的代码会引起歧义(执行环境是www.lua.org发布的Lua5.04)。 首先定义如下几个函数:function foo(a) print("foo print",a) return aend原创 2005-09-17 15:41:00 · 4463 阅读 · 7 评论 -
Generic for中使用pairs和ipairs的一个陷阱
Lua有一种很自然的循环方式,即Generic for。它的格式是这样的:for namelist in iterator do blockend其中iterator是一个迭代器函数,它可以有一个或多个返回值,namelist是逗号分隔的循环变量名列表,用来接收每次调用迭代器函数得到的返回值。这段程序的语义与下面形式的代码相同:while true do local namelis原创 2005-12-28 21:56:00 · 3984 阅读 · 4 评论 -
OpenLua简介:一个支持静态元编程的可扩展式开放编译器
邓际锋 本文采用 Creative Commons Attribution-ShareAlike 2.5 许可证零、 从哪里获得OpenLua OpenLua的项目主页是http://www.luachina.org/projects/openlua/ ,2005年12月28日0.01版发布,所有的源代码可从这里下载。因为Lua是主要的开发语言,所以在你的机器上必须有一原创 2006-03-04 02:50:00 · 6437 阅读 · 2 评论 -
一颗璀璨的月光宝石——Lua
邓际锋本文发表于2006年6月《程序员》杂志,谢绝转载Lua语言简介 1993年在巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro in Brazil)诞生了一门编程语言,发明者是该校的三位研究人员,他们给这门语言取了个浪漫的名字——Lua,在葡萄牙语里代表美丽的月亮。事实证明她没有糟蹋这个优美的单词,Lu原创 2006-08-10 12:55:00 · 6534 阅读 · 2 评论 -
Lua的debug hook功能探究与改造--上篇
Lua5.1提供了较为完善的debug库函数,其中的sethook可以让用户自己设置hook函数来监控程序的某些运行行为,这包括:调用 函数,从函数返回和将要运行新的一行代码,每当这些事件(event)发生时hook函数都会被调用。读者可以试试 monitor_v1.lua, 它是debug hook功能的一个简单应用。require导入该文件后便得到一个名为monitor的扩展库,里面只有一个原创 2006-12-24 23:36:00 · 18096 阅读 · 3 评论 -
Lua5.1.1的一个隐藏BUG
在最近的lua maillist上,三巨头之一的Roberto Ierusalimschy报告了一个5.1.1版本的bug:当一个函数里用到了超过 255个不同的全局变量和常量时,由数字常量和访问table的表达式组成的复合表达式(比如"2*a.x")就有可能产生很奇怪的结果。比如 下面这段程序: kkk = 2;v1=2; v2=2; v3=2; v4=2; v5=2; v6=2;原创 2007-02-04 16:38:00 · 9942 阅读 · 1 评论