Lua
wang1029
这个作者很懒,什么都没留下…
展开
-
Lua学习笔记 第五章 函数
在lua中,函数是一种对语句和表达式进行抽象的主要机制。函数既可以完成某项特定的任务,也可以只做一些计算并返回结果;lua为面向对象式的调用也提供了一种特殊语法——冒号操作符。表达式o.foo(o,x)的另一种写法是o:foo(x),冒号操作符使调用o.foo时将o隐含地作为函数的第一个参数;一个lua程序既可以使用lua编写的函数,又可以调用以C语言编写的函数。所有lua标准原创 2014-08-22 15:33:01 · 427 阅读 · 0 评论 -
Lua学习笔记 第十三章 元表(metatable) 与元方法(meatmethod)
通常Lua中,每个值都有一套预定义的操作集合。这个集合叫做元表。我们可以通过元表来修改一个值的行为,使其在面对一个非预定义的操作时执行一个指定的操作。如两个table相加。元方法是元表中的一个值,这个值应该是一个函数。Lua中的每个值都有一个元表。table和userdata可以有各自独立的元表,而其他类型的值则共享其类型所属的单一元表。Lua在创建新的table时不会创建元表原创 2014-08-25 18:03:28 · 532 阅读 · 0 评论 -
Lua学习笔记 第二十章 字符串库
字符串库中的所有函数导出在模块string中。使用时最要采用基于模块的写法,如string.upper(s);20.1 基础字符串函数string.len(s) —— 返回字符串s的长度string.rep(s, a)—— 可返回字符串s重复n次的结果string.lower(s) —— 返回一份s的副本,将大写字符转换成小写形式string.upper(s) —— 与原创 2014-08-26 16:29:06 · 370 阅读 · 0 评论 -
Lua学习笔记 第十六章 面向对象编程
Lua中的table就是一种对象。首先,table与对象一样可以拥有状态;其次,table与对象一样拥有一个独立于其值的标识(一个self)。最后,table与对象一样具有独立于创建者的生命周期。在函数中使用全局名称是一个不好的编程习惯。因为这个函数只能针对特定对象工作,并且这个特定对象还必须存储在特定的全局变量中。这种行为违反了对象特性,即对象拥有独立的声明周期。因此需要一个额外的参数来指定原创 2014-08-26 15:05:22 · 463 阅读 · 0 评论 -
Lua学习笔记 第十五章 模块与包
模块系统的一个主要目标是允许程序以不同的形式来共享代码。要实现共享就需要一些公共的规则。Lua从5.1开始,为模块和包定义了一系列的规则。这些规则不需要语言引入额外的技能,程序员可以使用table、函数、元表和环境来实现这些规则。有两个重要的函数可以很容易通过这些规则,它们是require(用于使用模块)和module(用于创建模块)。程序员可以使用不同的规则来重新实现这两个函数。从用原创 2014-08-26 14:55:28 · 632 阅读 · 0 评论 -
Lua学习笔记 第十八章 数学库
math库由一组标准的数学函数组成,包括三角函数(sin,cos,tan,asin,acos等)、指数和对数函数(exp,log,log10)、取整函数(floor,ceil)、max和min、生成伪随机数的函数(random、randomseed),abs取绝对值,fmod取模以及变量pi和huge。其中huge为Lua可以表示的最大数字。所有三角函数都使用弧度单位,可以用函数deg和r原创 2014-08-26 15:26:27 · 404 阅读 · 0 评论 -
Lua学习笔记 第十九章 table库
table库是由一些辅助函数构成的,这些函数将table作为数组来操作;19.1 插入和删除函数table.insert用于将一个元素插入到一个数组的指定位置,它会移动后续元素以空出位置。如果在调用insert时没有指定位置参数,则会将元素添加到数组末尾:t = {}for line in io.lines() do table.insert(t, line)endpr原创 2014-08-26 15:29:14 · 487 阅读 · 0 评论 -
Lua学习笔记 第十四章 环境
Lua将所有的全局变量保存在一个常规的table中,这个table称为"环境(enviroment)".这种组织结构的优点在于,其一、不需要再为全局变量创造一种新的数据结构,因此简化了Lua的内部实现。另一个优点是,可以像其他table一样操作这个table。为了便于实施这种操作,Lua将环境table自身保存在一个全局变量_G中。示例 —— 打印当前环境中所有全局变量的名称:原创 2014-08-26 14:46:53 · 462 阅读 · 0 评论 -
Lua学习笔记 第十七章 弱引用table
Lua采用了自动内存管理机制。一个程序只需创建对象,而无需删除对象。通过使用垃圾收集机制,Lua会自动地删除那些已成为垃圾的对象。这减轻了程序员在内存管理方面的负担,更重要的是将程序员从许多内存的bug中(如无效指针、内存泄露)中解放出来。垃圾收集器只能回收那些它认为是垃圾的东西,它不会回收那些用户认为是垃圾的东西。如递减顶部索引后,之前的栈顶元素仍保留在数组中;存储在全局变量中的原创 2014-08-26 15:24:37 · 597 阅读 · 0 评论 -
Lua学习笔记 第十一章 数据结构
Lua中的table不是一种简单的数据结构,它可以作为其它数据结构的基础。如数组、链表、队列等。 11.1数组使用整数来索引table即可在lua中实现数组。因此,数组没有一个固定的大小,可以根据需要增长。如:a = {}for i=1, 1000 do a[i] = 0end也可以使用0、1或者其它任意值来作为数组的起始索引。但如果数组的索引不以1开始,原创 2014-08-25 17:41:29 · 382 阅读 · 0 评论 -
Lua学习笔记 第十二章 数据文件与持久性
12.1 数据文件像10.1节介绍的那样,可以由table构造式来定义一种文件格式。这项技术也就是将数据作为Lua代码来输出,当运行这些代码时,程序也就读取了数据。示例——原来的数据文件格式:Donald E.Knuth, Literate Programming, CSLI, 1992Jon Bentley, More Programming Pearls, Addisom-原创 2014-08-25 17:44:04 · 548 阅读 · 0 评论 -
Lua学习笔记 第二章 类型与值
lua是一种动态类型语言;lua中的8种基础类型是:nil, boolean, number, string, userdata, function,thread, table函数type()可根据一个值返回其类型名称; nil是一种类型,只有一个值;一个全局变量在第一次赋值前的默认值就是nil,将nil赋予一个全局变量等同于删除它; boolean类型有两个值fals原创 2014-08-22 11:25:17 · 463 阅读 · 0 评论 -
Lua学习笔记 第六章 深入函数
在Lua中,函数是一种第一类值,它们具有特定的词法域;第一类值表示函数与其他传统类型的值具有相同的权利,函数可以存储到变量中或table中,可以作为实参传递给其他函数,还可以作为其他函数的返回值;词法域是指一个函数可以嵌套在另一个函数中,内部的函数可以访问外部函数中的变量;在Lua中函数与所有其它值一样都是匿名的,即它们都没有名称。当讨论一个函数名时实际上是讨论一个持有某函数的原创 2014-08-22 15:35:33 · 388 阅读 · 0 评论 -
Lua学习笔记 第九章 协同程序 —— coroutine
协同程序与线程差不多,拥有自己独立的栈、局部变量和指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。线程与协同程序的主要区别:一个具有多个线程的程序可以同时运行几个线程;而一个具有多个协同程序的程序在任意时刻只能运行一个协同程序,并且正在运行的协同程序只会在其显示地要求挂起时,它的执行才会暂停。 9.1 协同程序基础Lua将所有协同程序的函数放置在一个名为"corouti原创 2014-08-22 16:03:11 · 465 阅读 · 0 评论 -
Lua学习笔记 第三章 表达式
3.1算术操作符lua支持常规的算术操作符 —— + - * / ^ % -(负号)例如 x^0.5是计算x的平方根 x^(-1/3)是计算x立方根的倒数对于实数x,x%1的结果是x的小数部分,而x-x%1的结果是x的整数部分,x-x%0.01是精确到x小数点后两位的结果; 3.2关系操作符lua提供的关系操作符 = == ~=所有这些操作符的运算结果都是tru原创 2014-08-22 11:42:13 · 349 阅读 · 0 评论 -
Lua学习笔记 第四章 语句
4.1赋值 lua允许多重赋值,也就是将多个值赋予多个变量;每个值或每个变量之间以逗号分隔;lua会将等号右边值的个数调整到与左边变量的个数相一致。如果值的个数少于变量的个数,多余的变量会被赋为nil;若值得个数多余变量的个数,那么多余的值会被丢弃(先丢弃最右边的);多重赋值中,lua会先对等号右边的所有元素求值,然后才执行赋值;这样便可以用一句多重赋值来交换两个变量的值了,如:原创 2014-08-22 15:30:36 · 340 阅读 · 0 评论 -
Lua学习笔记 第八章 编译、执行与错误
Lua是一种解释型语言,区别解释型语言的主要特征并不在于是否能编译他们,而是在于编译器是否是语言运行时库的一部分,即是否有能力执行动态生成的代码。 8.1编译在Lua中,dofile函数是一种内置操作,用于运行Lua代码块;但实际上dofile只是一个辅助函数,loadfile才做了真正核心的工作。loadfile的两个功能:一是从一个文件中加载Lua代码块,但它不会运行代码,只是原创 2014-08-22 15:45:24 · 490 阅读 · 0 评论 -
Lua学习笔记 第十章 完整的示例
参考书本详细示例原创 2014-08-22 16:11:20 · 393 阅读 · 0 评论 -
Lua学习笔记 第一章 开始
Lua学习笔记第一章一节1.下载安装完lua后,会自带一个lua解释器程序!使用命令 lua hello.lua 便可 运行.lua文件;2.直接在命令行中执行lua解释器便进入交互模式,在这种模式下输入的每条命令 都将立即被执行;3.退出解释器,使用系统函数os.exit() 或快捷键 ctrl+D (windows下是ctrl+Z)4.另一种执行文件的方式是原创 2014-08-22 11:08:25 · 420 阅读 · 0 评论 -
Lua学习笔记 第七章 迭代器与泛型for
7.1 迭代器与closure所谓迭代器就是一种可以遍历一种集合中所有元素的机制;在Lua中,通常将迭代器表示为函数;每调用一次函数即返回集合中的下一个元素;closure(闭合函数)对于迭代器的实现提供了极佳的支持;一个closure结构通常涉及到两个函数:closure本身和一个用于创建该closure的工厂(factory)函数;简单的迭代器示例 ——funct原创 2014-08-22 15:40:35 · 392 阅读 · 0 评论 -
Lua学习笔记 第二十一章 I/O库
I/O库为文件操作提供了两种不同的模型,简单模型(simple model)和完整模型(completemodel)。简单模型假设有一个当前输入文件和一个当前输出文件,它的I/O操作均作用于这些文件。完整模型则使用显示的文件句柄。它采用了面向对象的风格,并将所有的操作定义为文件句柄上的方法。21.1 简单I/O模型简单模型的所有操作都作用于两个当前文件。I/O库将当前输入文原创 2014-08-28 09:51:46 · 518 阅读 · 0 评论