码迷,mamicode.com
首页 > 其他好文 > 详细

lua技巧分享之保护执行

时间:2015-07-25 15:06:56      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

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

 

lua技巧分享之保护执行

标签:

原文地址:http://www.cnblogs.com/linbc/p/4675837.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!