我们在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() 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)

最新文章

  1. ReactNative官方中文文档0.21
  2. Java List双击事件
  3. 转:CDC,CPaintDC,CClientDC,CWindowDC区别
  4. .NET: WPF Template
  5. JSON初步
  6. 【BZOJ】【2301】problem b
  7. 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 6.全局防护Bypass之一些函数的错误使用
  8. spring mvc 全局异常处理
  9. MySQL建立连接的过程
  10. 2016最新cocoapods版本更新,以及多个版本的问题
  11. virtual hard disk
  12. 蓝桥杯算法训练<二>
  13. JavaScript中的高阶函数
  14. 阿里字体css代码引入方法
  15. leetcode1009
  16. scrapy框架系列 (2) 一个简单案例
  17. IocPerformance 常见IOC 功能、性能比较
  18. P1063 能量项链
  19. vgg_face人脸识别
  20. 如何使用C#程序给PDF文件添加编辑域

热门文章

  1. 10分钟学会基于ASP.NET的 JQuery实例 (转)
  2. VK Cup 2012 Qualification Round 1 C. Cd and pwd commands 模拟
  3. UVA 253 (13.08.06)
  4. 移动端折腾国外分享(facebook、twitter、linkedin)
  5. 微信公共服务平台开发(.Net 的实现)10-------地理位置
  6. 使用命令行工具将Android应用转换成BlackBerry PlayBook应用
  7. JavaScript Modules
  8. 【JavaScript】AJAX总结(异步JavaScript和XML)
  9. JavaEE系列之(二)commons-fileupload实现文件上传、下载
  10. Matlab程序怎样打包