실행으로 확인하기
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 지점으로 돌려줍니다. 재개할 수 없는raise는 정상적으로 돌아오지 못합니다.- 오류 객체는 문서에 적힌 술어와 접근자로 확인하세요. 표시된 진단 문자열을 파싱하면 안 됩니다.
- 맞는
guard절이 하나도 없으면 원래 오류가 그대로 다시 발생합니다.
직접 확인하기
guard 절 가운데 오류 객체와 맞는 것이 하나도 없으면 어떻게 될까요?
답
원래 오류가 그대로 다시 발생합니다. 맞는 절이 없다고 해서 평범한 성공 값으로 바뀌지는 않습니다.
흔한 오해
ResourceLimit은 잡을 수 없습니다. 호스트가 죽는 상황도 친절한 게스트 오류로 바뀌지 않습니다.
다음으로
진단 문서는 단계와 코드를 설명합니다. 결정 규칙 가이드는 잘못된 입력을 비즈니스 결정 전에 걸러 내는 법을 보여 줍니다.