在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
我们在c#/c++里为了防止调用出现异常的时候程序可以正常的执行,经常使用try{}catch{}的结构, 那么,语言简单的lua是怎么做到的呢?答案就在pcall 先简单的介绍一下这个函数: --尝试将一个字符串加上整数,肯定是error的 local status, err = pcall(function () a = 'a'+1 end) print(err) --> stdin:1: attempt to perform arithmetic on a string value local status, err = pcall(function () error("my error") end) print(err) --> stdin:1: my error 用人话来说就是:传不带参数的函数指针他帮你执行,返回两个参数,第一个是执行状态,成功返回true,有错误返回false,并且错误描述 注意了,这个函数是不带参数的,如果需要传送参数给你需要调用的函数,你只能选择闭包或者说是匿名函数了 function make_err(c) assert(c) end local status, err = pcall(function () make_err(1) end) print(status, err) 如果我的执行过程中需要看到调用的堆栈怎么办呢? 答案就在:debug.traceback() 完整代码如下: function a(s) return b(s) .. ' a' end function b(s) return c(s) .. ' b' end function c(s) if not s then print(debug.traceback()) error('不可以是nile拉') end return s .. ' c' end --print(debug.traceback()) local status, err = pcall(function () a(nil) end)
|
请发表评论