一般的なケースでは、スーパークラスを介して行う必要があるのであまり意味がありませんが、特定のパラメータに "nil"を許可し、別のメソッドを定義する必要はありません。CLOSメソッド定義では、スペシャライザーはクラスのリストであり、単一のクラスではありませんか?
私は、これはプレーンCLOSではサポートされていません
(defmethod my-method ((obj1 my-class1) (obj2 (or my-class2 null)))
method-body )
一般的なケースでは、スーパークラスを介して行う必要があるのであまり意味がありませんが、特定のパラメータに "nil"を許可し、別のメソッドを定義する必要はありません。CLOSメソッド定義では、スペシャライザーはクラスのリストであり、単一のクラスではありませんか?
私は、これはプレーンCLOSではサポートされていません
(defmethod my-method ((obj1 my-class1) (obj2 (or my-class2 null)))
method-body )
こと(擬似コード)のような何かをしようとしています。サポートされている
は以下のとおりです。
> T
また、特殊化しないでください - 関心のある種類のスーパーセットに適用可能なメソッドを作成しますが、サブセットのみに作用します。これは簡単に行うことができますが、あまりクリーンではありません。
コードの重複を避けるために、[1] defmethodsの束を書き込むマクロを書くか、[2] defmethodパターンの上にラベルを使用するか、メソッドコードをラベル関数内に保持し、その関数にアクセスできる複数のメソッドを定義する(defmethodクロージャ) –