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