lua程序设计第二版 读书笔记(18-21章)

书本下载地址                     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(数学)库由一组标准的数学函数构成,包括三角函数(sincostanasinacos等)、指数和对数函数(exploglog10)、取整函数(floorceil)、maxmin、生成伪随机函数(randomrandomseed),变量pihuge

math.random 函数产生伪随机数

运行程序可以看到每次前面3个都是一样的数值(伪随机数),而经过randomseed()后再调用函数,每次的结果就不同了(随机数)。

 

第十九章 table

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)可以方法索引ij之间(包括ij)所有字符的内部表示值。

其中j的默认值为i

20.2模式匹配(pattern-matching)函数

字符串库中最强大的函数就是findmatchgsubglobal substitute ,全局替换)和gmatchglobal 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编码:这种编码方式会将特殊字符(如‘=’、‘&’、‘+’)编码为“%<xx>”的形式,其中<xx>是字符的十六进制表示,空格转换为“+”。

例如:

 

 

tab扩展:

20.6 技巧

 

 

第二十一章 I/O

io.write(a,b,c) io.write(a..b..c) 的效果一样,而且避免了连接操作。不同于printwrite 不会自动添加如tabs 或换行符

例如:

 

函数io.read从当前输入文件中读取字符串,它的参数决定了要读取的数据

*all读整个文件

*line读下一行

*number读一个数

 num读一个string,最多读num 字符

 

21.2 完整I/O模型 

完整模型是基于文件句柄的,它等价于C语言中的流(FILE*),表示一个具有当前位置的打开文件。

io.open(filename,  mode )函数中:filename为路径名,mod为模式字符串(为读取、w为写入(删除原来的内容)a为追加、 b为打开二进制文件)。

例如:在当前目录下产生一个test.txt文件

 

通常在Lua中,一次性读取整个文件比逐行读取要快得多;但必须处理一些大文件时(几十M或者几百M),就无法一次性读取所有的内容了。一般最快的方法就是用足够大的块(如8KB)来读取文件。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值