gpt4 book ai didi

intersystems-cache - Caché ObjectScript 中的 Try-Finally 等价物

转载 作者:行者123 更新时间:2023-12-01 14:01:04 24 4
gpt4 key购买 nike

我正在寻找与流行的 Try-Finally 异常清理模式等效的语义,例如Why use try … finally without a catch clause?

想法是无论代码是成功还是失败,您都需要执行清理步骤,但清理代码不应干扰报告和处理错误。还是出了点问题,异常应该仍然传播。

我想写这样的东西:

O TempFile:(/NEW:/WRITE:/STREAM)
U TempFile
L +LockName
TRY {
...code that uses TempFile and may throw an error
} FINALLY {
//Be sure to delete file whether we have an error or not
O TempFile:(/DELETE)
C TempFile
//Be sure to release lock
L -LockName
}
... Rest of code that should only execute if there was no error

但是 ObjectScript 中的 TRY...CATCH 语法不支持 FINALLY 子句。

特别重要的是,这两个通常由 finally block 完成的事情都成立:

  • 清理代码总是在执行返回给调用者之前运行,无论是在出现错误时还是在一切正常运行时。
  • 如果发生错误,原始错误及其代码位置、上下文和堆栈将在调用堆栈中传播到原始调用者。清理代码不应干扰调试。

我不能简单地使用常规的 TRY...CATCH block ,因为 CATCH 会吃掉异常并阻止正确的错误上下文向上传递。也许有一种方法可以在不弄乱错误上下文的情况下重新抛出原始异常?

最佳答案

你可以throw捕获到错误,这将是原始错误,带有错误的原始位置和其他任何内容,因此 Try-Finally 可能如下所示。

try {
// some code that could be with errors
} catch ex {
}
// finally

throw:$g(ex) ex
// rest code that can't execute if was error

关于intersystems-cache - Caché ObjectScript 中的 Try-Finally 等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25390794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com