Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1430925
  • 博文数量: 129
  • 博客积分: 1449
  • 博客等级: 上尉
  • 技术积分: 3048
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-24 18:36
文章分类

全部博文(129)

文章存档

2015年(3)

2014年(20)

2013年(65)

2012年(41)

分类:

2013-01-24 11:03:34

5 -

Lua标准库提供直接通过C API实现的有用的函数。其中一些函数提供语言的核心服务(例如和);其他的提供对“外”访问服务(例如I/O);还有一些能用Lua自身实现,但是非常有用或者有关键的性能要求以致需要C实现(例如)。

所有库通过官方C API实现并且作为独立的C 模块提供。当前Lua拥有如下标准库:

  • 基础库;
  • 打包库;
  • 字符串操作;
  • 表操作;
  • 数学运算函数(sin、log等等);
  • 输入输出;
  • 操作系统设备;
  • 调试设备。

除了基础库和打包库,每个库提供其所有函数作为一个全局表的字段或作为其对象的方法。

要访问这些库,C宿主程序应该调用函数,它打开所有的标准库。另外,可以分别打开他们,方法是调用(用于基础库)、(用于打包库)、(用于字符串库)、(用于表库)、(用于数学运算库)、 (用于I/O库)、(用于操作系统库)和(用于调试库)。 这些函数在中声明并且不能直接调用:你必须像任何其他的C函数一样调用他们,例如,通过使用。

5.1 -

基础库给Lua提供一些核心函数。如果你的程序中没有包含该库,你需要仔细检查是否需要为一些它的设备提供实现。


当参数v的值为假(例如nilfalse)时放出一个错误;否则,返回它的所有参数。message是条错误消息;忽略时,缺省为“assertion failed!”。


该函数是垃圾收集器的通用接口。它根据第一参数提供不同的功能,opt

  • "stop": 停止垃圾收集器。
  • "restart": 重新启动垃圾收集器。
  • "collect": 执行一个完整的垃圾收集周期。
  • "count": 返回Lua中已用内存总量(以Kbyte为单位)。
  • "step": 执行一个垃圾收集step。step“尺寸”由arg(值越大意味着越多的step)以一种未指定的方式控制。如果要控制step尺寸,必须以实验的方式调整arg的值。如果step完成一个收集周期则返回true
  • "setpause": 设置收集器的pause(见)的新值为arg/100。
  • "setstepmul": 设置收集器的step multiplier(见)的新值为arg/


打开命名文件并将其内容作为一个Lua单元执行。当空参调用时,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的行为是未定义的。然而,你可以修改已经存在的字段。特别地,你可以清空已经存在的字段。


返回三个值:函数、表tnil,所以结构

     for k,v in pairs(t) do body end

将迭代表t的所有键-值对。

参阅函数关于其遍历期间对表修改的警告。


用给定参数以保护模式(protected mode)调用函数f。这意味着f内的任何错误都不被传播;代替的做法是,pcall捕获错误并返回一个状态码。它的第一结果是状态码(布尔),如果调用成功无误则为true。在这种情况下,pcall也在第一结果之后返回来自调用的所有结果。在任何错误的情况下,pcall返回false以及错误消息。


接受任意数量的参数,打印它们的值到标准输出(stdout),方式是利用函数将他们转换为字符串。print不是打算给格式化的输出使用的,而是作为一种快速显示值得方式,特别是对调试。对于格式化的输出,使用。


检查v1v2是否相等,不会调用任何元方法。返回布尔值。


获取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"字段,则tostringe为参数调用相应的值,并用调用的结果为其结果。


返回其仅有参数的类型,编码为一个字符串。该函数的可能结果是"nil"(字符串,不是值nil)、"number"、"string"、"boolean"、"table"、"function"、"thread"和"userdata"。


返回给定标的元素。该函数等价于
     return list[i], list[i+1], ···, list[j]

除了上面的代码只能用在元素数量固定的情况。缺省时,i是1而j是列表的长度,就像取长操作符(见)定义的那样。


保存含有当前解释器版本的字符串的全局变量(非函数)。该变量的当前内容是“Lua 5.1”。


该函数类似,除了可以设置新的错误处理器。

xpcallerr作为错误处理器,在保护模式中调用函数ff内的错误不被传播;代替做法是,xpcall捕获错误,以原始错误对象调用err函数,并返回一个状态码。它的第一结果是状态码(布尔值),如果调用成功无误则为true。在该情况下,xpcall也在该第一结果后面返回来自调用的所有结果。在错误的情况下,xpcall返回false以及来自err的结果。

阅读(989) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~