首页 > 代码库 > Lua 常用库函数
Lua 常用库函数
一、数学库
1. 随机数
math.randomseed(os.time()); -- 设置随机种子
for i=1, 100 do
print(math.random(-1000,1000)); -- 随机区间 [-1000,1000], math.random(1000) 表示 [1,1000]
end;
2. 最大,最小值
math.max math.min
二、table 库
1. 插入和删除
a = {10,20,30};
print(unpack(a));
table.insert(a,2,5);
print(unpack(a));
table.insert(a,100); -- 没有填写插入的位置,默认放置到尾部
print(unpack(a));
table.remove(a,1);
print(unpack(a));
table.remove(a); -- 没有填写删除的位置,默认删除最后一个元素
print(unpack(a));
2. 排序,后面的参数是一个匿名函数,表示排序规则
table.sort(a, function(a,b) return (a>b) end);
print(unpack(a));
table.sort(a, function(a,b) return (a<b) end);
print(unpack(a));
newLine();
3. 连接, exp2表示连接分隔符,exp3,exp4表示连接的起止下标
print (table.concat(a,"!",1, #a));
三、I/O 库
1. io.write(a,b,c); io.write 不会像print自动调用制表符或是回车
2. io.read的参数
"*all" 读取整个文件
"*line" 读取下一行 默认格式
"*number" 读取一个数字
<num> 读取一个不超过<num>个字符的字符串
line = io.read(10); -- 仅获取前10个字符
print(line);
print(io.read("*number"));
3. 完整I/O模型
local path = [[E:\Stadio\Lua\LuaCode\file.txt]]; -- 不转义
local f = assert( io.open(path,"a") ); -- 可以是 "r" 读取, "w" 写入, "a" 追加, "rb" "wb" 读取二进制文件
local t = f:read("*all"); -- 读取整个文件
-- local text, rest = f:read(BUFSIZE,"*line"); -- 分块读取,rest表示被切开后剩余的部分
print(t);
--f:write("\nfor test"); -- 写入文件
print(f:seek()); -- 获取文件指针当前位置
print(f:seek("end") .. " byte"); -- 获取文件大小,单位是字节
f:close();
四、操作系统库
1. 日期
print(os.time()); --返回秒数
print(os.date());
系统时间的格式字符
%a 星期简写
%A 星期全称
%b 月份简写
%B 月份全称
%c 日期和时间 默认
%d 一个月中的天数
%H 24小时制的小时
%I 12小时制的小时
%j 一年中的天数
%M 分钟数
%m 月份数
%p 上午或是下午
%S 秒数
%w 一星期中的第几天
%x 日期 d/m/y
%X 时间 h/m/s
%y 年份 98
%Y 年份 1998
print(os.date("%A"));
print(os.date("%d"));
print(os.date("%w"));
print(os.date("%x"));
2. os.clock() 会返回当前CPU时间的描述,可用于计算一段代码的执行时间
local x = os.clock();
local s = 0;
for i=1, 10000000 do
s = i*100;
end;
print(x, os.clock(),"run: " .. os.clock()-x);
3. os.execute() 可运行一条系统命令
os.execute("ping www.qq.com -t");
4. os.exit() 终止程序运行,
5. print(os.getenv("path")); -- 获取环境变量的值
五、 调试库
1. 钩子函数。
钩子函数会在程序运行中某个特定事件发生时被调用,相当于触发器
4种事件会触发钩子:
调用函数 call 事件
返回时 return 事件
运行一行新代码 line 事件
运行指定函数代码 coutn事件
简写: "c" "r" "l"
2. 注册钩子函数:
debug.sethook(钩子函数,事件简写, <num>) 第三个参数主要是针对count, 在第三个参数指定行数
关闭钩子函数 debug.sethook();
3. 示例:
-- 定义钩子函数
function trace(evint, line)
print(evint, line); -- 打印事件和代码所在行号
end;
debug.sethook(trace, "l");
print("tracing");
i = 10;
debug.sethook(); -- 关闭钩子函数
a = 100;
1. 随机数
math.randomseed(os.time()); -- 设置随机种子
for i=1, 100 do
print(math.random(-1000,1000)); -- 随机区间 [-1000,1000], math.random(1000) 表示 [1,1000]
end;
2. 最大,最小值
math.max math.min
二、table 库
1. 插入和删除
a = {10,20,30};
print(unpack(a));
table.insert(a,2,5);
print(unpack(a));
table.insert(a,100); -- 没有填写插入的位置,默认放置到尾部
print(unpack(a));
table.remove(a,1);
print(unpack(a));
table.remove(a); -- 没有填写删除的位置,默认删除最后一个元素
print(unpack(a));
2. 排序,后面的参数是一个匿名函数,表示排序规则
table.sort(a, function(a,b) return (a>b) end);
print(unpack(a));
table.sort(a, function(a,b) return (a<b) end);
print(unpack(a));
newLine();
3. 连接, exp2表示连接分隔符,exp3,exp4表示连接的起止下标
print (table.concat(a,"!",1, #a));
三、I/O 库
1. io.write(a,b,c); io.write 不会像print自动调用制表符或是回车
2. io.read的参数
"*all" 读取整个文件
"*line" 读取下一行 默认格式
"*number" 读取一个数字
<num> 读取一个不超过<num>个字符的字符串
line = io.read(10); -- 仅获取前10个字符
print(line);
print(io.read("*number"));
3. 完整I/O模型
local path = [[E:\Stadio\Lua\LuaCode\file.txt]]; -- 不转义
local f = assert( io.open(path,"a") ); -- 可以是 "r" 读取, "w" 写入, "a" 追加, "rb" "wb" 读取二进制文件
local t = f:read("*all"); -- 读取整个文件
-- local text, rest = f:read(BUFSIZE,"*line"); -- 分块读取,rest表示被切开后剩余的部分
print(t);
--f:write("\nfor test"); -- 写入文件
print(f:seek()); -- 获取文件指针当前位置
print(f:seek("end") .. " byte"); -- 获取文件大小,单位是字节
f:close();
四、操作系统库
1. 日期
print(os.time()); --返回秒数
print(os.date());
系统时间的格式字符
%a 星期简写
%A 星期全称
%b 月份简写
%B 月份全称
%c 日期和时间 默认
%d 一个月中的天数
%H 24小时制的小时
%I 12小时制的小时
%j 一年中的天数
%M 分钟数
%m 月份数
%p 上午或是下午
%S 秒数
%w 一星期中的第几天
%x 日期 d/m/y
%X 时间 h/m/s
%y 年份 98
%Y 年份 1998
print(os.date("%A"));
print(os.date("%d"));
print(os.date("%w"));
print(os.date("%x"));
2. os.clock() 会返回当前CPU时间的描述,可用于计算一段代码的执行时间
local x = os.clock();
local s = 0;
for i=1, 10000000 do
s = i*100;
end;
print(x, os.clock(),"run: " .. os.clock()-x);
3. os.execute() 可运行一条系统命令
os.execute("ping www.qq.com -t");
4. os.exit() 终止程序运行,
5. print(os.getenv("path")); -- 获取环境变量的值
五、 调试库
1. 钩子函数。
钩子函数会在程序运行中某个特定事件发生时被调用,相当于触发器
4种事件会触发钩子:
调用函数 call 事件
返回时 return 事件
运行一行新代码 line 事件
运行指定函数代码 coutn事件
简写: "c" "r" "l"
2. 注册钩子函数:
debug.sethook(钩子函数,事件简写, <num>) 第三个参数主要是针对count, 在第三个参数指定行数
关闭钩子函数 debug.sethook();
3. 示例:
-- 定义钩子函数
function trace(evint, line)
print(evint, line); -- 打印事件和代码所在行号
end;
debug.sethook(trace, "l");
print("tracing");
i = 10;
debug.sethook(); -- 关闭钩子函数
a = 100;
调试库还有一些强大的应用,如 debug.getinfo, 性能剖析等,这部分先跳过,等需要的时候,再回头学习。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。