2010-03-24 4 views

답변

7

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에서 예제 코드와 예외 처리에 대한 자세한 설명이입니다.

+0

감사합니다 - 이것은 내가 찾고있는 것입니다. –

관련 문제