7
R6RS Scheme에서 예외를 던지고 잡는 표준 방법은 무엇입니까? 나는 R6RS를 구현하는 Scheme (PLT뿐만 아니라)의 모든 버전에서 작동하는 구문을 찾고있다.R6RS Scheme에서 예외를 던지고 처리하는 방법
R6RS guard syntax이 법안에 어울리는 것 같지만 누군가 실제로 나를 사용하는 방법을 보여줄 수 있습니까?
R6RS Scheme에서 예외를 던지고 잡는 표준 방법은 무엇입니까? 나는 R6RS를 구현하는 Scheme (PLT뿐만 아니라)의 모든 버전에서 작동하는 구문을 찾고있다.R6RS Scheme에서 예외를 던지고 처리하는 방법
R6RS guard syntax이 법안에 어울리는 것 같지만 누군가 실제로 나를 사용하는 방법을 보여줄 수 있습니까?
guard
의 의미는 우리가 여기에 사용하지 않는 보조 else
조항이
(guard (exception-object
((condition-1-to-test-exception-object) (action-to-take)
((condition-2-to-test-exception-object) (action-to-take)
((condition-N-to-test-exception-object) (action-to-take)
(else (action-for-unknown-exception)))
. 다음 샘플에서는 일반적인 파일 IO 작업으로 발생할 수있는 예외를 시뮬레이트합니다. 우리는 예외를 처리하는 guard
를 설치
(define mode 0)
(define (open-file)
(if (= mode 1)
(raise 'file-open-error)
(display "file opened\n")))
(define (read-file)
(if (= mode 2)
(raise 'file-read-error)
(display "file read\n")))
(define (close-file)
(if (= mode 3)
(raise 'file-close-error)
(display "file closed\n")))
(define (update-mode)
(if (< mode 3)
(set! mode (+ mode 1))
(set! mode 0)))
(define (file-operations)
(open-file)
(read-file)
(close-file)
(update-mode))
(define (guard-demo)
(guard (ex
((eq? ex 'file-open-error)
(display "error: failed to open file ")
(update-mode))
((eq? ex 'file-read-error)
(display "error: failed to read file ")
(update-mode))
(else (display "Unknown error") (update-mode)))
(file-operations)))
테스트 실행 :
> (guard-demo)
file opened
file read
file closed
> (guard-demo)
error: failed to open file
> (guard-demo)
file opened
error: failed to read file
> (guard-demo)
file opened
file read
Unknown error
> (guard-demo)
file opened
file read
file closed
R6RS의 Chapter 7에서 예제 코드와 예외 처리에 대한 자세한 설명이입니다.
감사합니다 - 이것은 내가 찾고있는 것입니다. –