Проверьте запуском
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возвращает результат handler в место raise; non-continuableraiseне может вернуться нормально.- Используйте документированные predicates/accessors error object, а не разбор отображённого текста диагностики.
- Если ни одна ветвь
guardне совпала, исходная ошибка поднимается заново без изменения.
Проверьте себя
Что произойдёт, если ни одна ветвь guard не совпадёт с объектом ошибки?
Ответ
Исходная ошибка будет поднята снова без изменений. Отсутствие совпадения не превращается в общее успешное значение.
Частая ошибка
ResourceLimit не перехватывается, а host crashes не превращаются в удобные гостевые ошибки.
Куда дальше
Этапы и коды описаны в диагностике, а ранний отказ неверного входа до бизнес-решения — в руководстве по правилам.