Проверьте запуском
LISPEX
(guard (e ((error-object? e) (error-object-message e))) (error "bad input"))Наблюдаемый результат
OUTPUT
"bad input"Разберите приём
- Возбудите гостевую ошибку.
(error "bad input")строит перехватываемый объект со стабильным сообщением. - Сопоставьте структуру.
guardпроверяетerror-object?, а не разбирает напечатанный текст. - Верните значение восстановления. Выбранная ветвь извлекает сообщение, и вся форма даёт
"bad input".
Как рассуждать
raise-continuableвозвращает результат обработчика в место возбуждения. Возбуждение черезraiseпродолжить нельзя, поэтому оно не может вернуться нормально.- Используйте документированные предикаты и функции доступа к объекту ошибки, а не разбор отображённого текста диагностики.
- Если ни одна ветвь
guardне совпала, исходная ошибка поднимается заново без изменения.
Проверьте себя
Что произойдёт, если ни одна ветвь guard не совпадёт с объектом ошибки?
Ответ
Исходная ошибка будет поднята снова без изменений. Отсутствие совпадения не превращается в общее успешное значение.
Частая ошибка
ResourceLimit не перехватывается, а падение хоста не превращается в удобную гостевую ошибку.
Куда дальше
Этапы и коды описаны в диагностике, а руководство по записям решения показывает, что именно отклоняет один записанный запуск и что остаётся приложению.