2012-04-04 16 views
1

一般的なケースでは、スーパークラスを介して行う必要があるのであまり意味がありませんが、特定のパラメータに "nil"を許可し、別のメソッドを定義する必要はありません。CLOSメソッド定義では、スペシャライザーはクラスのリストであり、単一のクラスではありませんか?

私は、これはプレーンCLOSではサポートされていません

(defmethod my-method ((obj1 my-class1) (obj2 (or my-class2 null))) 
    method-body  ) 
+1

コードの重複を避けるために、[1] defmethodsの束を書き込むマクロを書くか、[2] defmethodパターンの上にラベルを使用するか、メソッドコードをラベル関数内に保持し、その関数にアクセスできる複数のメソッドを定義する(defmethodクロージャ) –

答えて

3

こと(擬似コード)のような何かをしようとしています。サポートされている

は以下のとおりです。

  • なしクラス - あなたがいないスロットとミックスインクラスを作成してのスーパークラスのリストにそれを追加することができ
0

> T

  • EQL
  • 一つのクラス関心のあるすべてのクラス。あなたがしていることは、あなたのリストのすべてのクラスが何らかのタイプに従っていることを意味するので、これは意味があります。

    また、特殊化しないでください - 関心のある種類のスーパーセットに適用可能なメソッドを作成しますが、サブセットのみに作用します。これは簡単に行うことができますが、あまりクリーンではありません。