Lua学习笔记之各种库
math库
三角函数:sin , cos , tan , asin , acos等
指数对数:exp , log , log10
取整函数:floor , ceil
max , min
随机数:random , randomseed
math.random(6) -- [1,6]之间的伪随机数
math.random(2,9) --[2,9]之间的伪随机数
math.randomseed( number ) 用number设置种子,以此初始化伪随机数生成器,程序会生成的相同的伪随机数序列。
table库
table库中的函数,*会将table作为数组来操作。
table.insert( t , 1 , 100 ) --在t中的第一个位置插入元素100
table.insert( t, 200 ) --在t中末尾添加元素200
table.remove( t , 1 ) --删除第一个位置的元素
table.remove( t ) --删除末尾元素
这些操作的运用,就可以实现 栈 ,队列 ,双向队列
table.sort( t ) 对数组排序
table.concat( t ) 将 字符串数组
连接起来,可以用来实现字符串缓冲,在数据结构一章中有所阐述。
OS库
它不包含目录操作和套接字操作的系统函数。但是独立lua库提供:posix库提供POSIX.1标准功能,
luasocket库提供网络支持。
os.rename函数 文件改名
os.remove函数 删除文件
os.time() 返回当前时间戳
os.time{ year=1970 , month=1 , day=1 , hour=0 } 指定时间秒数
os.date( fmt , ... ) 返回当前时间,指定格式串
os.exit( ) 终止当前程序的执行
os.getenv( ‘someenv’ ) 获取某环境变量的值
os.execute( ) 可运行一条系统命令
os.setlocale() 设置当前lua程序所使用的区域
I/O库
简单io库:有2个当前文件(输入,输出), 被进程初始化为标准输入文件stdin,和标准输出文件stdout。
io.input(filename) ; io.output(filename) 修改 2个当前文件,之后,再调用io.input() ; io.output()修改,否则将一直沿用当前文件。
io.write(a,b,c) 不一定使用标准输出,不会添加 ’\t’,’\n’额外字符。
print() 总是使用标准输出,并且会添加制表符或回车。
io.read()
io.read( “*all” ) : “*all” ; “*line” ; “*number” ; <num>(<64>)
io.read(0) 用于检查是否到了 文件结尾,如果有数据可读返回空字符串;否则返回nil。
完整io库:
基于文件句柄
io.open( “filename” , ‘r’ ) -- r ; w ; a ; b
io.open函数返回nil,和一条错误信息 及 错误代码
--> nil non-existent-file: No such file or directory 2
-->nil xxxxxfilename: Permission denied 13
local f = assert( io.open( filename , mode ) )
f:close()
io.stdin , io.stdout , io.stderr io库预定义句柄
io.stderr:write(message)
io.input() 可以得到当前文件
local temp = io.input() -- 保存当前文件
io.input( “newinput” ) -- 打开一个新的当前文件
< 对新的输入文件做一些操作>
io.input():close() -- 关闭当前文件
io.input( temp)
性能小诀窍:
按块儿读取 :
local lines, rest = f:read( BUFSIZE , “*line” )
rest 包含了被块儿断开的一行剩余的部分。
分块儿,不断行
其他函数:
io.function() 刷新当前文件 或者 f:function() 刷新f
tmpfile() 返回一个临时文件句柄,读写方式打开,进程结束删除。
flush() 刷新缓冲写入文件。
f:seek( whence , offset )
whence --> “set”:起始位置;”cur”:当前位置(默认);”end”:末尾位置
offset-->偏移字节数 默认0
以上所有文件库函数:错误返回nil 和 一条错误信息