9

没有办法模拟没有它们的语言try-finally或语言?try-except

如果有一些随机的、不可预测的异常发生,我需要确保运行一些清理。

可以尝试确保没有抛出异常,这样我就可以确定我的清理代码总是运行 - 但是我不需要try-finally/except.

此刻我正在尝试try-finally在 Lua 中创建一个;但我认为任何解决方案也适用于其他语言。

虽然,在我的一生中,如果没有语言基础设施提供的管道,我无法弄清楚如何处理异常。

但从来没有伤害过问。

4

4 回答 4

14

Lua 已经有必要的机制来做一些与异常不完全不同的事情。即pcall.

您可以使用它pcall来执行任何 Lua 函数。如果该函数(或它调用的任何函数)调用(error如果断言条件不成立,则调用),则流控制将返回到语句所在的位置。将返回 false 和错误消息(传递给 的内容)。asserterrorpcallpcallerror

有了这个,你可以“抛出”错误并“捕捉”它们。你的“尝试”只是pcall; 您的“catch”语句是检查pcall结果的内容。

另外,请记住:Lua 是一个垃圾收集环境。您不需要做任何清理工作。或者如果你这样做了,你需要改变 Lua 模块需要的任何东西。Lua API 应该是 Lua API,而不是 C 或 C++ API。

于 2012-01-02T02:31:22.433 回答
2

从未在 lua 中编程(这就是您将其标记为的内容)。但是,包括这个http://jessewarden.com/2011/01/lua-for-actionscript-developers.html在内的几个网页提到受保护的调用(pcall)是lua错误处理设备。

希望这可以帮助。

于 2012-01-02T02:29:22.780 回答
1

这个Lua 异常处理系统怎么样?您还可以使用Lua RAII机制。

于 2012-01-02T02:50:25.997 回答
0

通常,可以使用 signal() 函数捕获异常。不确定 lua 是否会支持这样的。在 C 中,这就是你要使用的。这是一个很大的烦恼!(有点复杂。)

于 2012-01-02T02:32:48.127 回答