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

书本下载地址                     http://download.csdn.net/detail/myy2012/5349646

本部分下载地址                 http://download.csdn.net/detail/myy2012/5380439

 

 

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

 

 

第二十二章 操作系统库

操作系统库定义在table os中,其中包括了文件操作函数、获取当前日期和时间的函数,以及其他一些与操作系统相关的功能。

22.1 日期和时间

 

os.date(...)的参数如下(默认为%c

符号

意义

符号

意义

%a

如:Wed

%A

如:Wednesday

%b

如:Sep

%B

如:September

%c

如:05/14/13 16:10:42

%d

一个月中的第几天

%H

24小时制中的小时

%I

12小时制中的小时

%j

一年中的第几天

%M

分钟

%m

月份

%p

am/pm

%S

秒数

%w

一个星期中的第几天

%x

如:05/14/13

%X

如:16:13:54

%y

如:13

%Y

如:2013

 

 

22.2其他系统调用

os.exit()  中止当前程序的执行。

os.getenv() 获取一个环境变量的值。

os.execute() 运行一条系统命令。

os.setlocale() 设置当前Lua程序所使用的区域。

区域分成6种分类:

collate 控制字符串的字母顺序

ctype控制单个字符的类型及其大小写间的转换

monetary 不影响Lua程序

numeric 控制如何格式化数字

time 控制如何格式化日期和时间

all 控制上述所有功能

 

第二十三章 调试库

调试库和其他库不同,必须慎重使用。

调试库并没有提供一个Lua的调试器,而是提供了一个编写调试器所必须具有的原语。这些原语的标准接口是通过C API给出的,而Lua中的调试库则提供了一条Lua代码中直接访问这些接口的途径。

23.1 自省机制

debug.getinfo(...)函数。它的第一个参数可以是一个函数或者一个栈层。当为某函数foo调用debug.getinfo(foo)时,就会得到一个table,其中包含了一些与该函数相关的信息。

source

short_src:

linedefined:

lastlinedefined:

what:

name:

namewhat:

nups:

activelines:

func:

getinfo函数的效率不高,Lua会以一种不影响程序正常执行的方式来保存调试信息;至于调试这些信息的效率则是次要的。

为了得到更好的性能,getinfo还有第二个参数(用于指定希望获取的信息)。这个参数是一个字符串,其中每个字母代码一组字段。

 

n

选择namenamewhat

f

选择func

s

选择source short_src what linedefined 和 lastlinedefined

l

选择currentline

L

选择activelines

u

选择nups

debug.getlocal函数可以检查任意活动函数的局部变量;这个函数有2个参数:一个是希望查询的函数栈层(若栈是无效的,则引发一个错误),另一个是变量的索引(若大于活动变量的总数,则返回nil),否则函数返回2个值(变量的名字和它的当前值)。

 

 

 

还可以通过debug.setlocal改变局部变量的值。它的前2个参数与getlocal相同(栈层和变量索引),第三个参数是该变量的新值;若变量索引超出了范围,则返回nil,否则返回变量名。

getupvalue函数使用户可以访问一个Lua函数所使用的“非局部变量”。与局部变量不同的是,被一个函数所引用的“非局部变量”会一直存在着,即使这个引用它的函数已经执行完毕。函数getupvalue的第一个参数为一个函数(closure),第二个参数为变量索引。

还可以通过debug.setupvalue函数来修改“非局部变量”。该函数的第一个参数为一个closure,第二个参数为一个变量索引,第三个参数为一个新值。

 

 

23.2 钩子

调试库中的钩子机制使用户可以注册一个钩子函数,这个函数会在程序运行中某个特定事件发生时候被调用。有以下4个事件会触发一个钩子:

产生call事件、产生return事件、产生line事件、产生count事件。

若要注册一个钩子,需要用2个或者3个参数来调用debug.sethook函数。第一个为钩子函数、第二个为一个字符串(描述了需要监控的事件)、第三个为可选的数字(用于说明多久获取一次count事件)。

 

 

23.3 性能剖析(profile

如果是做计时性的剖析,最好使用C接口(因为每次Lua调用钩子的代价太高了,从而使得测试结果偏差较大)。不过对于计数性的剖析,Lua代码可以做的很好。

 

这部分内容有点多,不完整。

 

第三部分完

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值