Condition Type CONDITION
全てのコンディションの型は、 エラーか非エラー関わらず、この型を継承しなければなりません。
本文中で明示的に言及されている場合を除き、 指定された型condition
のサブタイプの間で 追加のサブタイプの関係は許可されません。 しかし実装であれば追加の型を導入することが許されており、 これらの型のひとつは、 任意の数の型condition
のサブタイプの さらなるサブタイプであることができます。
ユーザーで定義したコンディションの型が持つスロットを with-slots
によってアクセスできるかどうかは 実装依存です。 さらに実装内にあるユーザー定義のコンディション型がスロットを持っているかどうか、 またコンディション型のドキュメントにそのようなスロットが定義されているか、 それらのスロットが名前を持っており実際に扱っているかどうかなどは、 すべて実装依存です。 移植可能なコードが参考にできるのは、 ただ仕様書に記載されているリーダー関数のみです。
仕様に適合したコードはコンディションに関係する 下記の制約に従わなければなりません。
新しいコンディション型を定義するときは define-condition
を使用しなければならず、 defclass
ではいけません。
コンディションのオブジェクトを明に作成するときは、 make-condition
を使用しなければならず、 make-instance
ではいけません。
コンディションの報告を定義するときは define-condition
の:report
オプションを使用しなければならず、 print-object
のdefmethod
を定義してはいけません。
slot-value
, slot-boundp
, slot-makunbound
, with-slots
は コンディションオブジェクトに使用してはいけません。 かわりに(define-condition
によって定義された) 適切なアクセス関数を使用する必要があります。