exception-handling - 如何在没有它们的语言中模拟 try-finally 或 try-except

标签 exception-handling lua try-catch try-finally

有没有任意 模拟 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/

相关文章:

c++ - 在 Lua 中创建回调函数

lua - Corona SDK widget.newButton() 在场景内时未出现在模拟器中 :create

javascript - 捕获获取错误

java - 关闭 ExecutorService

Try/Catch block 中的 PHP 变量范围

lua - 使用 lua 过滤器在 LaTeX 环境中的标题之间放置内容

java - NumberFormatException 未在 try/catch 中被捕获

exception - 我无法将验证消息设置为约束

java - 捕获 Throwable 和 StackOverflowError 时的不同行为

java - try/catch/finally 使用connection.close()