思路
今天做功能遇到一个问题,因为项目使用LuaFramework,组件如果想在lua使用使用要额外导出,而在lua代码里面不知道这个组件是否已经被导出,又因为变量引用还没来得及判空就直接报错。这时候候就只能使用错误处理了,之前没怎么用过,这次用了就记录一下
pcall
描述
以一种"保护模式"来调用第一个参数,因此pcall可以捕获函数执行中的任何错误。
第一个参数要传入一个函数,后面是函数所用的参数,运行中,会执行传入的函数,返回两结果是一个布尔指,表示是否正常运行无报错
用法
if pcall(function_name, ….) then
-- 没有错误
else
-- 一些错误
end
xpcall
描述
Lua提供了xpcall函数,xpcall接收第二个参数——一个错误处理函数,当错误发生时,Lua会在调用桟展开(unwind)前调用错误处理函数,于是就可以在这个函数中使用debug库来获取关于错误的额外信息了。
用法
function myfunction ()
n = n/nil
end
function myerrorhandler( err )
print( "ERROR:", err )
end
status = xpcall( myfunction, myerrorhandler )
print( status)
Debug
描述
Lua 提供了 debug 库用于提供创建我们自定义调试器的功能。Lua 本身并未有内置的调试器,但很多开发者共享了他们的 Lua 调试器代码。
这个比较复杂,以后用到再补充,先不赘述了,有兴趣的参考
Lua 调试(Debug)
总结
pcall已经足够我的需求,其实就是一个防报错处理,但是不知道这个的效率消耗是怎么样的,后面看看lua源码了解一下