lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]



在 2011-6-20 晚上11:30,"steve donovan" <steve.j.donovan@gmail.com>写道:
>
> 2011/6/20 Xavier Wang <weasley.wx@gmail.com>:
> > But I have some things to do even if I want throw the error, I want to
> > execute some code when the function I called have error, even if I don't
> > care what error it does , I just want some resource to be clean .
>
> Ah, like this?
>
> local ok, err = pcall(problem_function)
> if not ok then
>   pcall(cleanup)
>   error(err)
> end
>
> That is, re-raise the error.
>
> steve d.
>
Yes , it's great  :)
And next question, your code cannot handle multiple return value, is there any more generic way to handle more situations? Just like:

local ok, rets... = pcall(func)
pcall(cleanup())
if not ok then
    pcall(err_func)
    error(rets...)
end
-- using rets, note that before here I don't actually know how many values the function returns
local a,b,c = rets...