Ваша спецификация охватывает только нормальное поведение, а не исключительный случай.
Нормальное поведение означает, что все постусловия должны соблюдаться после выполнения метода. Следовательно, существует возвращаемое значение, и вам разрешен доступ к нему (\result
). В исключительном случае ваше предложение requires
не будет четко определено.
Если вы хотите указать случай, когда возникает исключение, вы должны использовать exceptional_behavior
и в случае, если вы хотите показать для «свободы от исключений» используйте behavior
. Оба в сочетании с предложением signals
. Например, используйте следующее, чтобы показать свободу от исключений:
/*@ public behavior
requires true;
signals (Exception e) false;
*/
Этот контракт не может быть выполнен методом, который может вызвать исключение.
См. Глава 7 (особенно «7.3.3 Семантика случаев спецификации нормального поведения») ключевой книги.