Lua 常用函数

函数原型:

next (table [, index])

功能:

用于遍历表中所有的域。它的第一个参数是一个表,第二个参数是这个表的一个索引。该函数返回表的下一个索引和与之相关联的值。当使用nil作为第二个参数调用这个函数的时候,它会返回初始的索引和与之相关联的值。当使用最后一个索引作为第二个参数调用这个函数的时候,它会返回nil;当第一个参数是空表,第二个参数是nil时,它也会返回nil。第二个参数的默认值是nil。通常,可以使用next(t)来检查一个表是否是空表。
索引被枚举的顺序是不确定的,即使对整型索引也是如此,因此为了按照整型顺序遍历一个表可以使用数值for循环或ipairs函数。
next函数的行为是undefined if, 在遍历期间,可以给表中不存在的域赋值,修改已经存在的域,也可以清空已存在的域。


函数原型:

assert (v [, message])

功能

如果它的第一个参数v为假(也就是nilfalse),那么该函数会抛出一个错误;否则返回它所有的参数。message是错误信息,默认值是assertion failed!


函数原型:

loadfile([filename])

功能:

读取源代码文件,将其编译成字节码,并且返回编译后的chunk(作为一个函数),但是不执行代码。
另外,loadfile不会抛出错误,而是返回nil和错误信息。
filename的默认值是标准输入。


函数原型:

dofile(filename)

功能:

读取源代码文件,并且把它的内容作为一个chunk来执行。它会返回chunk返回的所有值;出错的时候,dofile函数把错误传播给它的调用者(也就是说,dofile不是运行在保护模式下)。
filename的默认值是标准输入。


函数原型:

load (func [, chunkname])

功能:

加载一个chunk。每次调用函数func,必须返回一个字符串,返回的字符串会与之前的结果连接起来;也可以返回nil(或者没有返回结果),意味着chunk结束。也就是说,每次调用func都返回chunk的一部分,load函数会把这些部分连接起来形成一个完整的chunk。
加载chunk的时候,如果没发生错误,那么返回编译后的chunk(作为一个函数);否则返回nil和错误信息。load函数返回的函数使用的环境是全局环境
chunkname被当作chunk的名称,用于错误信息和调试。

在Lua5.3中,也可以从一个字符串获取chunk,比如:

Lua 5.3.2  Copyright (C) 1994-2015 Lua.org, PUC-Rio  
> f = load("i=1", "chunkname")
> f()
> print(i)
1  


loadstring在lua5.2中已经被弃用了。


错误、错误处理和错误追踪

1,error (message [, level])
error函数用于显式的抛出错误,参数message是要抛出的错误信息,错误信息不一定非要是字符串,可以是任何类型,比如table。
error会终止函数的执行,不会返回错误。
error函数支持在错误信息的开头,添加一些关于关于错误位置的信息。level参数指定了如何获取错误位置,level等于1表示错误位置就是error函数被调用的地方,level等于2表示错误位置是调用error的函数被调用的地方,以此类推。level等于0会在错误消息中,关闭错误位置信息。

2,pcall (f, arg1, ···)
在保护模式下,用给定的参数调用函数f,这意味着f内部的任何错误,都会被pcall捕获,而不会传播出去。
pcall的第一个返回值是boolean类型的状态码。如果f内部没有发生错误,那么pcall返回true加调用f(arg, ...)返回的所有值,否则返回nil加错误信息。

这种机制提供了在Lua中处理异常和错误的所需要的全部内容:通过error抛出异常,然后通过pcall捕获异常。

3,xpcall (f, err, ...)
与pcall类似,但是可以设置一个错误处理函数。
xpcall在保护模式下,用给定的参数调用函数f,使用err作为错误处理函数。在f内部发生的任何错误,都会被xpcall捕获,而不会传播出去。当函数f内部发生错误时,会使用原始的错误信息调用err函数,xpcall返回false加err函数的第一个返回值;否则,返回true加调用f(...)返回的所有值。

4,debug.traceback ([thread,] [message])
返回一个带有 调用栈的traceback 的字符串,message字符串会被追加到traceback的开始处,这个函数通常和xpcall一起使用,来生成更加友好的错误信息。


参考资料

感谢浏览tim chow的作品!

如果您喜欢,可以分享到: 更多

如果您有任何疑问或想要与tim chow进行交流

可点此给tim chow发信

如有问题,也可在下面留言: