Spec-Zone.ru › Octave 5

10.8 Оператор unwind_protect

Octave поддерживает ограниченную форму обработки исключений, основанную на форме unwind-protect языка Lisp.

Общая форма блока unwind_protect выглядит следующим образом:

unwind_protect
  body
unwind_protect_cleanup
  cleanup
end_unwind_protect

где body и cleanup являются необязательными и могут содержать любые выражения или команды Octave. Операторы в cleanup гарантированно будут выполнены независимо от того, каким образом завершится выполнение body.

Это полезно для защиты временных изменений глобальных переменных от возможных ошибок. Например, следующий код всегда восстановит исходное значение глобальной переменной frobnosticate даже если произойдёт ошибка в первой части блока unwind_protect.

save_frobnosticate = frobnosticate;
unwind_protect
  frobnosticate = true;
  …
unwind_protect_cleanup
  frobnosticate = save_frobnosticate;
end_unwind_protect

Без unwind_protect, значение frobnosticate не было бы восстановлено, если бы во время выполнения первой части блока unwind_protect произошла ошибка, так как выполнение остановилось бы на месте ошибки, и оператор восстановления значения не был бы выполнен.

Помимо unwind_protect, Octave поддерживает другую форму обработки исключений, блок try.

© 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
https://docs.octave.org/v5.2.0/The-unwind_005fprotect-Statement.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API