PS:仅作记录,自查具体实现
一、基本库函数(basic functions)
_G:保存全局环境的全局变量(不是函数)(即_G._G = _G)。Lua本身不使用这个变量;改变它的值不会影响任何环境,反之亦然。(改变环境使用setfenv)
_VERSION:保存包含当前解释器版本的字符串的全局变量(不是函数),5.1中这个变量的值是“Lua 5.1”。
assert(v [, message])
:断言函数。
当参数v的值为真时,不做任何处理返回其所有参数;为假(即nil或false)时,返回message。message
是一个可以自定义的错误提示信息,不写时默认为“assertion failed!”(断言失败!)。
collectgarbage([opt [, arg]])
:垃圾回收函数。
函数是垃圾收集器的通用接口,它根据第一个参数执行不同的函数
- "collect":执行完整的垃圾收集循环,这是默认选项。
- "stop":停止垃圾收集器
- "restart":重新启动垃圾收集器
- "count":返回Lua使用的总内存(单位为KB)
- "step":执行垃圾收集步骤,步骤“size”由arg以非指定的方式控制(较大的值意味着更多的步骤)。如果你想控制步长,你必须通过实验调整参数的值。如果该步骤完成了一个收集循环,则返回true
- "setpause":将arg设置为收集器暂停的新值,返回前一个pause值。
- "setstepmul":将arg设置为收集器的阶跃乘法器的新值,返回step之前的值。
dofile([filename])
:打开指定的文件并将其内容作为Lua块执行。在没有参数调用时,dofile执行标准输入(stdin)的内容。返回该块返回的所有值。在出现错误时,dofile将错误传播给它的调用者(也就是说,dofile不以受保护模式运行)
error(message [, level])
:终止最后一个被调用的受保护函数并返回message作为错误信息,error函数没有返回值。通常,error会在消息的开头添加一些关于错误位置的信息。level参数指定如何获取错误位置。对于级别1(默认),错误位置是调用error函数的位置;第2级将错误指向调用error函数所在的位置等等。传递0级可以避免向消息添加错误位置信息。
setfenv(f, table)
:设置给定函数要使用的环境。f可以是Lua函数,也可以是指定该堆栈级别上的函数的数字:级别1是调用setfenv的函数。setfenv返回给定的函数。作为一种特殊情况,当f为0时,setfenv会改变运行线程的环境。在这种情况下,setfenv不返回任何值。
getfenv([f])
:返回函数使用的当前环境。f可以是一个Lua函数,也可以是指定堆栈级别上的函数的数字:级别1是调用getfenv的函数。如果给定的函数不是Lua函数,或者f为0,则getfenv返回全局环境。f的默认值是1
setmetatable(table, metatable)
:为给定的表设置元表,函数返回一个表。(不能从Lua更改其他类型的元表,只能从c更改)如果元表为空,则删除给定表的元表。如果原始的元表具有“__metatable”字段,会报错。
getmetatable(object)
:如果对象没有元表,则返回nil。否则,如果对象的元表具有“__metatable”字段,则返回关联的值。否则,返回给定对象的元表。
load(func [, chunkname])
:使用函数func加载一个块来获取它的片段。对func的每个调用都必须返回一个字符串,该字符串与前面的结果相连接,返回空字符串、nil或no值表示块结束。如果没有错误,则将编译后的块作为函数返回;否则,返回nil加上错误信息,返回函数的环境是全局环境。chunkname用作错误信息和调试信息的块名称,默认为“=(load)”。
loadfile([filename])
:类似于load,但如果没有给定文件名,则从filename文件或标准输入获取数据块
loadstring(string [, chunkname])
:类似于load,但从给定字符串获取块。要加载和运行给定的字符串,请使用这个方式 assert(loadstring(s))() 。没有string时,chunkname默认为给定的字符串。
next(table [, index])
:允许程序遍历表的所有字段。它的第一个参数是一个表,第二个参数是这个表中的一个索引。next返回表的下一个索引及其关联值。当以nil作为第二个参数调用时,next将返回一个初始索引及其关联值。当使用最后一个索引或空表中的nil调用时,next将返回nil。如果第二个参数不存在,则将其默认为nil。可以使用next(t)检查表是否为空。
注:1)、即使对于数值索引,也没有指定索引的枚举顺序。若要按数字顺序遍历表,请使用数值 for或ipairs函数。
2)、如果在遍历期间将任何值赋给表中不存在的字段,则next的行为是undefined未定义的。但是,可以修改现有的字段。特别是,可以清除现有字段。
pairs(t)
:返回三个值:下一个函数、表t和nil,以便构造 for k,v in pairs(t) do body end 将遍历表t的所有键值对。
注:有关在遍历过程中修改表的注意事项,请参阅函数 next
ipairs(t)
:返回三个值:一个迭代器函数、表t和0,以便构造 for i,v in ipairs(t) do body end 将遍历对(1,t[1]), (2,t[2]),···,直到第一个没有出现在表中的整数键