错误处理
assert断言
-
作用:确保某些数据是符合预期的,避免影响最终结果。
-
格式:assert(条件语句,报错信息)
当条件语句为true时,assert语句不会有任何行为,但是当为false时,assert会将报错信息弹出,并中断程序的执行。 -
注意:由于断言只在调试模式下有效,因此在生产环境中通常会被禁用,以避免影响程序性能。
error
- 功能:主动发起错误并终止正在执行的函数,并返回message的内容作为错误信息。
pcall
pcall以一种"保护模式"来调用第一个参数,如果遇到报错,就会返回false及报错信息,因此pcall可以捕获函数执行中的任何错误。
pcall(function, 传给函数的参数)pcall(function(i) print(i) end, 22) -- 输出:22-- 当函数报错时,会返回false,报错信息
local result, err = pcall(function(i) print(i) error("error") end, 22)
xpcall
参数:待执行函数,错误处理函数,传给待处理函数的参数
作用:通常在错误发生时,希望落得更多的调试信息,而不只是发生错误的位置。但pcall返回时,它已经销毁了调用桟的部分内容,Lua提供了xpcall函数,xpcall接收一个错误处理函数,当错误发生时,Lua会在调用桟展开前调用错误处理函数,于是就可以在这个函数中使用debug库来获取关于错误的额外信息了。
xpcall(function(i) print(i) error('error..') end, function() print(debug.traceback()) end, 33)
热更
虚拟机
垃圾回收机制
实现了一个增量标记-扫描收集器。 它使用这两个数字来控制垃圾收集循环: 垃圾收集器间歇率和垃圾收集器步进倍率。 这两个数字都使用百分数为单位 (例如:值 100 在内部表示 1 )。
垃圾收集器间歇率控制着收集器需要在开启新的循环前要等待多久。 当这个值比 100 小的时候,收集器在开启新的循环前不会有等待。 设置这个值为 200 就会让收集器等到总内存使用量达到 之前的两倍时才开始新的循环。
垃圾收集器步进倍率控制着收集器运作速度相对于内存分配速度的倍率。 增大这个值不仅会让收集器更加积极,还会增加每个增量步骤的长度。 不要把这个值设得小于 100 , 那样的话收集器就工作的太慢了以至于永远都干不完一个循环。 默认值是 200 ,这表示收集器以内存分配的"两倍"速工作。