Eiffel 和 Rescue 条款中的错误处理

Error handling in Eiffel and Rescue clause

在程序末尾编写一个救援子句以结束 Eiffel 中的程序是否足以处理程序中编写的任何例程中的前置条件、后置条件或不变量违规等异常?或者我应该为每个具有前置条件和后置条件的函数编写 rescue 子句来处理异常?

我看过Eiffel documentation on error handling但我想不通。

答案取决于您的期望。方法如下:

  1. 向调用方报告违反前提条件。它们表明调用者中存在错误。如果在调用者中预期或可能存在错误,您可以在调用者中捕获并处理它们。

  2. 向被调用者报告后置条件违规。它们指示被调用方中的错误。如果预期存在此类错误,被调用方可以捕获并处理它们。

  3. Class 不变量是在对象创建时建立的。如果它们被创建过程违反或在执行合格调用中使用的过程之后,它们表明被调用者中存在错误并且可以像后置条件违反一样处理。否则,它们表示涉及对象依赖性的更复杂问题。它可以由调用者处理,但很可能几乎不可能恢复正确的对象状态。

在所有情况下,断言违规都意味着程序错误,是否以及如何捕获和处理它取决于您的需要。例如,可以在有问题的代码和根过程之间的某个地方进行处理。