迷惘的码农。
分类:
2008-08-15 11:22:56
Lua标准库提供直接通过C API实现的有用的函数。其中一些函数提供语言的核心服务(例如和);其他的提供对“外”访问服务(例如I/O);还有一些能用Lua自身实现,但是非常有用或者有关键的性能要求以致需要C实现(例如)。
所有库通过官方C API实现并且作为独立的C 模块提供。当前Lua拥有如下标准库:
除了基础库和打包库,每个库提供其所有函数作为一个全局表的字段或作为其对象的方法。
要访问这些库,C宿主程序应该调用函数,它打开所有的标准库。另外,可以分别打开他们,方法是调用(用于基础库)、(用于打包库)、(用于字符串库)、(用于表库)、(用于数学运算库)、 (用于I/O库)、(用于操作系统库)和(用于调试库)。 这些函数在中声明并且不能直接调用:你必须像任何其他的C函数一样调用他们,例如,通过使用。
基础库给Lua提供一些核心函数。如果你的程序中没有包含该库,你需要仔细检查是否需要为一些它的设备提供实现。
v
的值为假(例如nil或false)时放出一个错误;否则,返回它的所有参数。message
是条错误消息;忽略时,缺省为“assertion failed!”。
该函数是垃圾收集器的通用接口。它根据第一参数提供不同的功能,opt
:
arg
(值越大意味着越多的step)以一种未指定的方式控制。如果要控制step尺寸,必须以实验的方式调整arg
的值。如果step完成一个收集周期则返回true。
arg
/100。
arg
/
dofile
执行标准输入(stdin
)的内容。返回单元返回的所有值。在发生错误的情况下,dofile
将错误传播到其调用者(即dofile
不是运行于保护模式)。
message
作为错误消息。函数error
决不返回。
通常,error
在消息的开头增加关于错误位置的信息。level
参数指定如何获得错误位置。
用级别1(缺省的)时,错误位置是error
函数被调用处。级别2指向调用error
的函数的调用处。传递级别0避免向消息附加错误位置信息。
_G._G = _G
)。Lua自身并不使用该变量;改变其值不影响任何环境,反之亦然。(使用来改变环境。)
f
可以是Lua函数或指定调用栈级别的数字:级别1是调用getfenv
的函数。如果给出的函数不是Lua函数或者f
为0,getfenv
返回全局环境。f
缺省为1。
如果object
没有元表,返回nil。否则,如果对象的元表具有"__metatable"
字段,返回关联的值。否则返回给定对象的元表。
返回三个值:迭代器函数、表t
和0,所以结构
for i,v in ipairs(t) do body end
将迭代键值对(1,t[1]
)、(2,t[2]
)、···,直到第一个不存在于表中的整数键。
通过用func
函数获取代码片的方式载入单元。对func
的每次调用必须返回一个与先前的结果串联的字符串。返回nil(或无值)告知单元结束。
如果没有错误,将编译的单元作为函数返回;否则返回nil以及错误消息。被返回的函数的环境是全局环境。
chunkname
作为单元名用于错误消息和调试信息。当省略时,缺省委“=(load)
”。
与类似,但是从文件filename
中获取单元,如果未给出文件名则从标准输入获取。
与类似,但是从给定的字符串获得单元。
要载入并运行给定的字符串,使用惯用法:
assert(loadstring(s))()
当省略时,chunkname
缺省为给定的字符串。
允许程序遍历标的所有字段。它的第一参数是表,第二参数是该表中的索引。next
返回表的下一个索引及其关联的值。当以nil作为第二参数调用时,next
返回初始索引和关联的值。当以最后的索引调用或以nil调用空表时,next
返回nil。如果省略第二参数,它被解释为nil。特别地,可用next(t)
测试表是否为空。
索引被列举的顺序是未指定的,即使是数字索引。(要以数字顺序遍历表,使用数字for或函数。)
如果在遍历期间给表中不存在的字段赋任意值,则next
的行为是未定义的。然而,你可以修改已经存在的字段。特别地,你可以清空已经存在的字段。
返回三个值:函数、表t
和nil,所以结构
for k,v in pairs(t) do body end
将迭代表t
的所有键-值对。
参阅函数关于其遍历期间对表修改的警告。
用给定参数以保护模式(protected mode)调用函数f
。这意味着f
内的任何错误都不被传播;代替的做法是,pcall
捕获错误并返回一个状态码。它的第一结果是状态码(布尔),如果调用成功无误则为true。在这种情况下,pcall
也在第一结果之后返回来自调用的所有结果。在任何错误的情况下,pcall
返回false以及错误消息。
标准输出(stdout)
,方式是利用函数将他们转换为字符串。print
不是打算给格式化的输出使用的,而是作为一种快速显示值得方式,特别是对调试。对于格式化的输出,使用。
v1
与v2
是否相等,不会调用任何元方法。返回布尔值。
table[index]
的实际值,不会调用任何元方法。table
必须是个表;index
可以是任何值。
table[index]
的实际值为value
,不会调用任何元方法。table
必须是个表,index
可以是任何非nil值,并且value
可以是任何Lua值。
该函数返回表
。
如果index
是数字,返回参数数字index
之后的所有参数。否则,index
必须是字符串"#"
,并且select
返回它收到的而外参数的总数。
设置给定函数要用的环境。f
可以是Lua函数或栈中指定级别的函数:级别1是调用setfenv
的函数。setfenv
返回给定的函数。
作为特例,当f
为0时setfenv
改变当前运行线程的环境。在该情况下,setfenv
不返回值。
为给定表设置元表。(你不能从Lua中改变其他类型的元表,只能从C中。)如果metatable
为空nil,移除给定表的元表。如果原始元表具有"__metatable"
字段,产生一个错误。
该函数返回表
。
tonumber
返回该数字;否则返回nil。
可选参数指定如何解释数字的基数。基数可以是2和36之间的任何整数,也包括它们。在高于10的基数中,字母'A
'(大小写皆可)表示10,'B
'表示11,依次类推,直到'Z
'表示35。在基数为10(缺省)时,数字可以有小数部分,也可有可选的指数部分(见)。其他基数只接受无符号整数。
如果e
的元表有"__tostring"
字段,则tostring
以e
为参数调用相应的值,并用调用的结果为其结果。
nil
"(字符串,不是值nil)、"number
"、"string
"、"boolean
"、"table
"、"function
"、"thread
"和"userdata
"。
return list[i], list[i+1], ···, list[j]
除了上面的代码只能用在元素数量固定的情况。缺省时,i
是1而j
是列表的长度,就像取长操作符(见)定义的那样。
Lua 5.1
”。
该函数类似,除了可以设置新的错误处理器。
xpcall
用err
作为错误处理器,在保护模式中调用函数f
。f
内的错误不被传播;代替做法是,xpcall
捕获错误,以原始错误对象调用err
函数,并返回一个状态码。它的第一结果是状态码(布尔值),如果调用成功无误则为true。在该情况下,xpcall
也在该第一结果后面返回来自调用的所有结果。在错误的情况下,xpcall
返回false以及来自err
的结果。