是否有任何方式来模拟没有它们的语言中的try-finally
或try-except
?
如果有一些随机的,不可预测的异常发生,我需要确保一些清理运行。
我可以尝试确保抛出没有异常,这样我确定我的清理代码总是运行 - 但后来我不需要try-finally/except
。
这一刻我正试图在Lua中创建一个try-finally
;但我认为任何解决方案都适用于其他语言。
虽然,就我而言,如果没有语言基础设施提供的管道,我无法弄清楚如何处理异常。
但永远不要伤心。
答案 0 :(得分:15)
Lua已经拥有必要的机制来完成与异常不同的事情。即pcall
。
您可以使用pcall
执行任何Lua功能。如果该函数(或它调用的任何函数)调用error
(如果断言条件不为真,则assert
调用error
),那么流控制将返回{{1}的站点声明。 pcall
将返回false和错误消息(传递给pcall
的内容)。
有了这个,你可以“抛出”错误并“抓住”它们。你的“尝试”只是error
;你的“catch”语句检查pcall
结果。
另外,请记住:Lua是垃圾收集环境。你不应该做任何清理工作。或者,如果你这样做,你需要改变Lua模块所需的任何东西。 Lua API应该是Lua API,而不是C或C ++ API。
答案 1 :(得分:2)
从未在lua中编程(这是你标记为的)。但是,包含这一个http://jessewarden.com/2011/01/lua-for-actionscript-developers.html的几个网页提到受保护的调用(pcall)是lua错误处理设备。
希望这有帮助。
答案 2 :(得分:0)
通常,可以使用signal()函数捕获异常。不确定lua会支持这样的。在C中,这就是你要使用的。这是一个很大的烦恼! (有点复杂。)
答案 3 :(得分:0)
这个Lua Exception Handling system怎么样?您还可以使用Lua RAII机制。