コンディションを定義する


Tags: R6RS, コンディション

コンディションは例外が発生した場合にその状況に関する情報を表現するためのオブジェクトである。

例えば、 HTTP 接続を扱うプログラムを考えた場合、失敗時に例外を起こしたいと考えるかもしれない。そのような場合、接続先から戻ってきたステータスコード、ヘッダ、メッセージ本体がコンディションに含まれると有用であろう。

コンディションを定義するには define-condition-type 構文を使う。 define-condition-type の構文は次の通りである。

(define-condition-type <condition-type> <super-type>
  <constructor> <prpedicate>
  (<field> <accessor>)
  ...)

先の、 HTTP 接続の状況を表すコンディションは次のように定義できる。

(imort (rnrs))

(define-condition-type &http-condition &condition
  make-http-condition http-condition?
  (status-code http-condition-status-code)
  (heaeder http-condition-heaeder)
  (body http-condition-body))

実際に例外を通知する場合にはこのコンディションと他のコンディションを合成することになるだろう。