next (table [, index])
用于遍历表中所有的域。它的第一个参数是一个表,第二个参数是这个表的一个索引。该函数返回表的下一个索引和与之相关联的值。当使用nil作为第二个参数调用这个函数的时候,它会返回初始的索引和与之相关联的值。当使用最后一个索引作为第二个参数调用这个函数的时候,它会返回nil;当第一个参数是空表,第二个参数是nil时,它也会返回nil。第二个参数的默认值是nil。通常,可以使用next(t)来检查一个表是否是空表。
索引被枚举的顺序是不确定的,即使对整型索引也是如此,因此为了按照整型顺序遍历一个表可以使用数值for循环或ipairs函数。
next函数的行为是undefined if
, 在遍历期间,可以给表中不存在的域赋值,修改已经存在的域,也可以清空已存在的域。
assert (v [, message])
如果它的第一个参数v
为假(也就是nil
或false
),那么该函数会抛出一个错误;否则返回它所有的参数。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一起使用,来生成更加友好的错误信息。