Eiffel 和 Rescue 条款中的错误处理
Error handling in Eiffel and Rescue clause
在程序末尾编写一个救援子句以结束 Eiffel 中的程序是否足以处理程序中编写的任何例程中的前置条件、后置条件或不变量违规等异常?或者我应该为每个具有前置条件和后置条件的函数编写 rescue 子句来处理异常?
答案取决于您的期望。方法如下:
向调用方报告违反前提条件。它们表明调用者中存在错误。如果在调用者中预期或可能存在错误,您可以在调用者中捕获并处理它们。
向被调用者报告后置条件违规。它们指示被调用方中的错误。如果预期存在此类错误,被调用方可以捕获并处理它们。
Class 不变量是在对象创建时建立的。如果它们被创建过程违反或在执行合格调用中使用的过程之后,它们表明被调用者中存在错误并且可以像后置条件违反一样处理。否则,它们表示涉及对象依赖性的更复杂问题。它可以由调用者处理,但很可能几乎不可能恢复正确的对象状态。
在所有情况下,断言违规都意味着程序错误,是否以及如何捕获和处理它取决于您的需要。例如,可以在有问题的代码和根过程之间的某个地方进行处理。
在程序末尾编写一个救援子句以结束 Eiffel 中的程序是否足以处理程序中编写的任何例程中的前置条件、后置条件或不变量违规等异常?或者我应该为每个具有前置条件和后置条件的函数编写 rescue 子句来处理异常?
答案取决于您的期望。方法如下:
向调用方报告违反前提条件。它们表明调用者中存在错误。如果在调用者中预期或可能存在错误,您可以在调用者中捕获并处理它们。
向被调用者报告后置条件违规。它们指示被调用方中的错误。如果预期存在此类错误,被调用方可以捕获并处理它们。
Class 不变量是在对象创建时建立的。如果它们被创建过程违反或在执行合格调用中使用的过程之后,它们表明被调用者中存在错误并且可以像后置条件违反一样处理。否则,它们表示涉及对象依赖性的更复杂问题。它可以由调用者处理,但很可能几乎不可能恢复正确的对象状态。
在所有情况下,断言违规都意味着程序错误,是否以及如何捕获和处理它取决于您的需要。例如,可以在有问题的代码和根过程之间的某个地方进行处理。