next up previous contents index
: コンディションオブジェクトの生成 : エラー処理機能 : コンディションオブジェクトのスロットの参照   目次   索引


コンディションクラスの定義

本節では,ユーザが新たにコンディションクラスを定義するために用意されて いる機能について説明する.

(define-condition 《名前》《リスト》 (《スロット$_1$$\cdots$《スロット$_n$》)《レポート関数》)) 【マクロ】

(define-condition 《名前》《リスト》 (《スロット$_1$$\cdots$《スロット$_n$》)《文字列》)) 【マクロ】

《名前》 という名前の新しいコンディションクラスのクラスを定義す る. 定義されたコンディションのクラスは, 《リスト》で与えられるクラス をダイレクトスーパークラスとするクラスであり, 《リスト》で指定さ れたクラスのダイレクトサブクラスとなる. 《スロット$_1$$\sim$《スロット$_n$》で指定された各スロットは,定 義したクラスが固有に持つスロットとなる. また, 《リスト》で指定したダイレクトスーパークラスが持つスロット を継承する. 《レポート関数》は,コンディションオブジェクトと出力ストリームの2引数 をとる関数,で与える. 《レポート関数》の代わりに,《文字列》を与えると,内部で次のよ うに置き換えられる.

(lambda (condition stream)
  (format stream 《文字列》))

例:
次の例はコンディションクラス conditionをダイレクトスーパークラス とするコンディション my-conditionを定義している. my-conditionは, slot-a slot-b slot-cという クラス固有のスロットを3つ持っている.

> (define-condition my-condition (condition)
                      (slot-a slot-b slot-c)
                      (lambda (c s)
                        (format s "Signalled MY-CONDITION.")))
#t
> (error 'my-condition)
Condition:  Signalled MY-CONDITION.
Backtrace: ...
>



Tsuneyasu KOMIYA 平成14年2月22日