书本下载地址 http://download.csdn.net/detail/myy2012/5349646
本部分下载地址 http://download.csdn.net/detail/myy2012/5374753
lua程序设计第二版 读书笔记(1-4章)
第一章 开始
第二章 类型与值
第三章 表达式
第四章 语句
http://blog.csdn.net/myy2012/article/details/8900424
lua程序设计第二版 读书笔记(5-8章)
第五章 函数
第六章 深入函数
第七章 迭代器与泛型for
第八章 编译执行与错误
http://blog.csdn.net/myy2012/article/details/8906466
lua程序设计第二版 读书笔记(9-10章)
第九章 协同程序
第十章 完整的实例
http://blog.csdn.net/myy2012/article/details/8911206
lua程序设计第二版 读书笔记(11-14章)
第十一章 数据结构
第十二章 数据文件与持久性
第十三章 元表metatable与元方法meatmethod
第十四章 环境
http://blog.csdn.net/myy2012/article/details/8914457
lua程序设计第二版 读书笔记(15-17章)
第十五章 模块与包
第十六章 面向对象编程
第十七章 弱引用 table
http://blog.csdn.net/myy2012/article/details/8921632
lua程序设计第二版 读书笔记(18-21章)
第十八章 数学库
第十九章 table库
第二十章 字符串库
第二十一章 IO库
http://blog.csdn.net/myy2012/article/details/8925895
lua程序设计第二版 读书笔记(22-23章)
第二十二章 操作系统库
第二十三章 调试库
http://blog.csdn.net/myy2012/article/details/8930181
math(数学)库由一组标准的数学函数构成,包括三角函数(sin、cos、tan、asin、acos等)、指数和对数函数(exp、log、log10)、取整函数(floor、ceil)、max和min、生成伪随机函数(random、randomseed),变量pi和huge。
math.random 函数产生伪随机数。
运行程序可以看到每次前面3个都是一样的数值(伪随机数),而经过randomseed()后再调用函数,每次的结果就不同了(随机数)。
19.1 插入和删除
函数table.insert()用于将一个元素插入到一个数组的指定位置。
A.若有指定位置,则在该位置插入。
B.若无指定位置,则在末尾插入。
函数table.remove()用于移除table中的元素
A. 若有指定位置,则移除指定位置上的元素
B. 若无指定位置,则移除最后一个元素
可以用t={}来初始化结构,用table.insert(t, x)来进行压入操作,用table.remove(t)来进行弹出操作。(table.insert(t, 1, x)和table.remove(t, 1) 起始处的操作---效率不高)
19.2 排序
table.sort()函数用于排序。
在table中,索引是一个无序的集合,如果对它们进行排序,必须将它们复制到一个数组中,然后对这个数组进行排序。
另外还可以使用迭代器来实现,以下函数还有个可选参数f,用于指定某种特殊的次序。
19.3 连接
以下函数是table.concat函数的一个扩展:
字符串库中的所有函数都导出在模块string中,在Lua5.1中,它还将这些函数导出作为string类型的方法。例如以下两个表达式等价: string.upper(s) 、s:string()。
20.1 基础字符串函数
Lua中的字符串是不可改变的。如果要改变一个变量的值,就必须赋予它一个新的值,例如: s = string.sub(s, 2, -2)
string.char 和string.byte用于转换字符及其内部数值表示。
例如:
调用string.byte(s, i, j)可以方法索引i到j之间(包括i和j)所有字符的内部表示值。
其中j的默认值为i
20.2模式匹配(pattern-matching)函数
字符串库中最强大的函数就是find、match、gsub(global substitute ,全局替换)和gmatch(global match, 全局匹配),它们都是基于“模式”的。
A. string.find
string.find函数 :当找到一个模式后,返回匹配到的起始索引和结尾索引;若没有找到则返回nil。
B. string.match
string.match函数:用于在一个字符串中搜索一种模式,返回目标字符串中与模式匹配的那部分子串。
C. string.gsub()
string.gsub函数:用于在一个字符串中替换,返回替换后的字符串和替换次数
D. string.gmatch()
string.gmatch函数:
20.3 模式
下面的表列出了Lua支持的所有字符类:
符号 |
意义 |
符号 |
意义 |
符号 |
意义 |
符号 |
意义 |
. |
任意字符 |
%s |
空白字符 |
%p |
标点字符 |
%c |
控制字符 |
%d |
数字 |
%x |
十六进制数字 |
%z |
代表0的字符 |
%a |
字母 |
%l |
小写字母 |
%u |
大写字母 |
%w |
字母数字 |
注:这些分类的大写形式表示它们本身的补集。
魔法字符:( ) . % + - * ? [ ] ^ $
符号 |
意义 |
符号 |
意义 |
符号 |
意义 |
% |
转义字符 |
[] |
创建字符集 |
^ |
[^ ]补集 |
+ |
匹配前一字符1次或多次 |
? |
匹配前一字符0次或1次 |
^ |
匹配字符串开头 |
* |
匹配前一字符0次或多次;最长匹配 |
- |
匹配前一字符0次或多次;最短匹配 |
$ |
匹配字符串结尾 |
20.4 捕获(capture)
在指定捕获时,应将模式中需要捕获的部分写到一对圆括号内。函数string.match会将所有捕获到的值作为单独的结果返回。
20.5 替换
URL编码:这种编码方式会将特殊字符(如‘=’、‘&’、‘+’)编码为“%
例如:
tab扩展:
20.6 技巧
io.write(a,b,c) 和io.write(a..b..c) 的效果一样,而且避免了连接操作。不同于print,write 不会自动添加如tabs 或换行符。
例如:
函数io.read从当前输入文件中读取字符串,它的参数决定了要读取的数据
*all读整个文件
*line读下一行
*number读一个数
num读一个string,最多读num 字符
21.2 完整I/O模型
完整模型是基于文件句柄的,它等价于C语言中的流(FILE*),表示一个具有当前位置的打开文件。
io.open(filename, mode )函数中:filename为路径名,mod为模式字符串(r 为读取、w为写入(删除原来的内容)、a为追加、 b为打开二进制文件)。
例如:在当前目录下产生一个test.txt文件
通常在Lua中,一次性读取整个文件比逐行读取要快得多;但必须处理一些大文件时(几十M或者几百M),就无法一次性读取所有的内容了。一般最快的方法就是用足够大的块(如8KB)来读取文件。