![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
【Lua】
_HelloBug
这个作者很懒,什么都没留下…
展开
-
Lua开发技巧-小表预填充
1、未使用预填充技术的代码start = os.clock()for i = 1, 1000000 do local t = {} t[1] = 1; t[2] = 2; t[3] = 3;endfinish = os.clock()print(finish - start)运行时间:0.522、使用预填充技术的代码start = os.clock()for i = 1, 1000000 do local t = {1, 2, 3} t[1] =原创 2021-07-14 20:07:07 · 359 阅读 · 0 评论 -
lua算术运算和关系运算metamethods
--[[说明1.以下使用的metamethod都是lua核心metamethod,使用的时候可以采用相应的操作符,如:__add可以解释成+。2.metamethod需要放在metatable中使用算术运算符对应的域:__add(+), __sub(-), __mul(*), __div(/), __unm(-负), __pow(^幂)关系运算符对应的域:__eq(==), _...原创 2019-07-19 17:20:07 · 341 阅读 · 0 评论 -
lua需要考虑数值溢出吗?
结论:不需要考虑在Programming in Lua 3rd 中文版中有这样一段描述:Lua使用双精度表示数字,(背景:在table构成的队列中执行插入操作,每右插入一个元素,队列中的下标加1)假定你每秒钟执行100万次插入操作,在数值溢出以前你的程序可以运行200年。...原创 2019-06-04 09:20:19 · 2249 阅读 · 0 评论 -
lua数组和链表
--[[矩阵和多维数组稀疏矩阵:矩阵的大部分元素都为空或者0]]-- 创建5*6的二维数组mt = {}for i = 1, 5 do mt[i] = {} for j = 1, 6 do mt[i][j] = 0 endend-- 创建5*6的二维数组mt1 = {}for i = 1, 5 do for j = 1, 6 do mt1[i * 6 + ...原创 2019-06-03 16:57:19 · 269 阅读 · 0 评论 -
lua数组
--[[数组1. 数组大小不固定,可以动态增长,但可以获得当前数组的元素个数2. 数组下标可以从任意值开始,若要使用标准库函数,数组下标必须从1开始,默认数组下标从1开始]]s = {1, 2, 3}print(table.getn(s)) -- Output: 3t = {1, 2, nil, 4}print(table.getn(t)) -- Output: 4t1 ...原创 2019-06-03 09:23:43 · 3698 阅读 · 0 评论 -
lua 字符串缓冲
--[[字符串缓冲]]-- 字符串拼接低效操作-- 读取整个文件的内容,保存在变量中local buff = ""for line in io.lines() do buff = buff .. line .. "\n"end--[[代码说明:1. io.lines()默认不读取换行'\n',所以在最后添加换行符2. lua里字符串是常量,即不可修改,当执行buff...原创 2019-06-05 13:07:33 · 352 阅读 · 0 评论 -
协同进程+过滤器实现生产者消费者
代码及注释如下,使用print函数打印值和行号,可以看到代码的运行路径--[[resume协程,如果协程执行的过程中调用yield函数,则resume函数返回yield的参数]]function receive(prod) local status, value = coroutine.resume(prod) print(value, debug.getinfo(1).cur...原创 2019-05-23 20:21:40 · 214 阅读 · 0 评论 -
协同进程实现生产者消费者
代码及注释如下,使用print函数打印值和行号,可以看到代码的运行路径--[[resume协程,如果协程执行的过程中调用yield函数,则resume函数返回yield的参数]]function receive(prod) local status, value = coroutine.resume(prod) print(value, debug.getinfo(1).cur...原创 2019-05-23 20:19:46 · 415 阅读 · 0 评论 -
初识协程
--[[协程(协同程序):有自己的堆栈,自己的局部变量,自己的指令指针,与其他协程共享全局变量。在多处理器的情况下,可以同时运行多个线程,但在指定的某一时刻只有一个协程在运行,并且这个正在运行的协程在指定的时候挂起。调用resume函数会将协程由挂起状态转为运行状态调用yield函数会将协程由运行状态转为挂起状态,并且协程会返回yield函数的参数]]co = corout...原创 2019-05-23 13:39:25 · 120 阅读 · 0 评论 -
pcall和xpcall
pcall--[[pcall返回的错误信息可以是代码执行的具体错误原因或者是error函数返回的错误信息pcall返回的错误信息原则是尽可能详细的描述错误原因]]function foo() a = 'a' + 1endlocal ok, err = pcall(foo)if not ok then print(err)endfunction bar() ...原创 2019-05-23 11:20:34 · 4472 阅读 · 0 评论 -
error指定错误等级
lua代码及解释脚本名称:pcall_3.lua--[[error:两个参数,第一个参数是错误信息,第二个参数是错误级别默认级别为10:表示不显示错误出现位置1:表示error函数调用的位置2:调用error函数的函数的位置3:依次类推]]function fun(str) if type(str) ~= "string" then error("strin...原创 2019-05-22 20:20:51 · 1332 阅读 · 0 评论 -
pcall
lua代码--[[pcall出现原因程序执行过程中可能会抛出异常,如果这个错误需要应用自己处理,使用pcall函数,避免抛出异常栈。pcall正常执行:返回true和被执行函数的返回值异常执行:返回nil和错误信息。错误信息不一定是一个字符串]]function bar() error("unknown")endfunction foo() --these tw...原创 2019-05-22 19:13:59 · 1926 阅读 · 0 评论 -
dofile、loadfile、loadstring
目录1.用法2.区别3.示例1.用法 dofile("filename") loadfile("filename") loadstring("lua statements")2.区别 dofile先编译,然后运行;loadfile只编译,不运行,编译之后返回一个函数,通过调用这个函数运行。 dofile出错会抛出错误信息,loa...原创 2019-05-16 21:18:52 · 376 阅读 · 0 评论