是否有任何方法在没有它们的语言中模拟try-finally
或try-except
?
如果有一些随机的,不可预测的,异常发生,我需要确保一些清理运行。
i 可以尝试确保没有抛出异常,这样我就可以确保我的清理代码总是运行-但是我不需要try-finally/except
。
就在这一刻,我试图创建一个try-finally
在Lua;但我认为任何解决方案都可以在其他语言中使用。
尽管,就我的生命而言,我无法弄清楚如何在没有语言基础结构提供的管道的情况下处理异常。
但问一问也无妨。
Lua已经有必要的机制来做一些不完全不同于异常的事情。即pcall
。
你可以使用pcall
来执行任何Lua函数。如果该函数(或它调用的任何函数)调用error
(如果断言条件不为真,则assert
调用error
),那么流控制将返回到pcall
语句的位置。pcall
将返回false和一个错误消息(传递给error
)。
有了这个,您可以"抛出"错误并"捕获"它们。你的"尝试"只是pcall
;你的"catch"语句是检查pcall
结果的。
还要记住:Lua是一个垃圾收集环境。你不需要做任何清理工作。或者,如果您这样做,则需要更改Lua模块所需的任何内容。Lua api应该是Lua api,而不是C或c++ api。
从未用lua编程(这就是你所标记的)。然而,包括这个http://jessewarden.com/2011/01/lua-for-actionscript-developers.html在内的几个网页提到protected call (pcall)是lua错误处理设备。
这个Lua异常处理系统怎么样?您也可以使用Lua RAII机制。