Бывает, требуется множество подпрограмм единообразно обернуть — добавить им всем одинаковое начало и завершение или,
что более интересно, выполнить их в блоке „try ... except
“ с каким-нибудь фильтром на исключения… Вообще, понятно,
что FPC поддерживает процедурные типы, но как раз типы тут могут быть самые разные, а нетипизированный вызов с ручной
установкой стека — это потенциальный неиссякаемый источник трудноуловимых ошибок.
Тут самое время вспомнить, что FPC с некоторых пор поддерживает еще и вложенные процедурные типы, а вложенная процедура
имеет доступ ко всей области видимости внешней, включая, естественно, аргументы и псевдопеременную result
.
Соответственно, можно вынести все действия подпрограммы во вложенную процедуру без параметров, а в основной блок вставить вызов «оборачивателя» с этой вложенной процедурой. Далее пример.
Определение обертки
Выводим на консоль исключение, если оно произошло, с пометкой времени.
Замечу, что полученное исключение мы отправляем далее по стеку, не подавляем.