3.5 Lua库
Lua库是利用C语言API实现的,提供了丰富的函数。其既可在库文件内部使用,也可以供外部调用。Lua库分为基础库(Basic library)、协程库(Coroutine Library)、包管理库(Package Library)、字符串控制(String Manipulation)、基础UTF-8支持(Basic UTF-8 Support)、表控制(Table Manipulation)、数学函数(Mathematical Function)、输入/输出(Input and Output)、操作系统处理(Operating System Facility)、调试工具(Debug Facility)。下面展示使用表控制中的table.sort方法对表进行排序。
> animal = {"lion","alpaca","panda","tiger","wolf"} > table.sort(animal) -- 按照首字母顺序排序 > for k,v in ipairs (animal) do >> print (k, v) >> end 1 alpaca 2 lion 3 panda 4 tiger 5 wolf
下面介绍一些常用的库及其对应的方法。
1.基础库
基础库提供了不少Lua核心方法。该库包含的方法详情如表3-7所示。
表3-7 基础库方法
2.I/O库
I/O库对文件的操作包含两种风格,一种是基于文件句柄,对应的方法详情如表3-8所示;另一种是基于当前操作的文件,对应的方法详情如表3-9所示。
表3-8 I/O库方法:基于文件句柄的方法
表3-9 I/O库方法:基于当前操作的文件的方法
代码清单3-11和代码清单3-12利用I/O库方法实现了相同的功能:文件复制,但是使用了不同的实现风格。读者可以比较这两种实现的异同点,以便更好地理解I/O库方法。
程序清单3-11 I/O库代码示例:基于文件句柄的方法
> function copy(src, dst) >> local src_file = io.input(src) >> if not src_file then >> print(src.."不存在") >> return >> end >> local str = io.read("*a") >> local dst_file = io.output(dst) >> io.write(str) >> io.flush() >> io.close() >> end > copy("lua.lua","lua.bak")
程序清单3-12 I/O库代码示例:基于当前操作的文件的方法
> function copy(src, dst) >> local src_file, err = io.open(src,"r") >> if not src_file then >> return false, err >> end >> local content = src_file:read("*a") >> src_file:close() >> local dst_file, err = io.open(dst, "w") >> if not dst_file then >> return false, err >> end >> dst_file:write(content) >> dst_file:close() >> return true >> end > copy("lua.lua","lua.bak") true
3.表库
表库提供了处理表的通用方法,包括从表(List)中插入、删除元素的方法以及对数组(Array)元素排序的方法。如果需要对表进行取长操作,那么表必须是一个真序列或者拥有__len元方法。表库方法详情如表3-10所示。
表3-10 表库方法
4.字符串库
字符串库提供了处理字符串的通用方法,包括字符串查找,子串、模式匹配等方法。当在Lua中对字符串做索引时,第一个字符从1开始计算。索引可以是负数,指从字符串末尾反向解析,即最后一个字符的位置为-1,依次类推。
字符串库中的所有方法都在字符串表中。它还将其设置为字符串元表的__index域。因此,用户可以以面向对象的形式使用字符串方法。例如,string.byte(s,i)可以写成s:byte(i)。字符串库方法详情如表3-11所示。
表3-11 字符串库方法