有没有任意 模拟 try-finally
的方法或 try-except
在没有它们的语言中?
如果有一些随机的、不可预测的异常发生,我需要确保运行一些清理。
我可以尝试确保没有抛出异常,这样我就可以确定我的清理代码总是运行 - 但是我不需要 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。
关于exception-handling - 如何在没有它们的语言中模拟 try-finally 或 try-except,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8696950/