2016-12-06 13 views
0

クラスのすべてのメソッド名をLISPで取得できますか?LISP - クラスからすべてのメソッド名を取得

実は、私は自分の名前で

セット -

を持っている方法を、必要とします。

(defun find-all-methods (class prefix) 
    (loop for method in (clos:specializer-direct-methods class) 
     for gf   = (method-generic-function method) 
     for fname  = (generic-function-name gf) 
     for fname-string = (when (symbolp fname) (symbol-name fname)) 
     when (and (stringp fname-string) 
        (>= (length fname-string) 
         (length prefix)) 
        (string= fname-string prefix 
          :end1 (length prefix) 
          :end2 (length prefix))) 
     collect method)) 

例:LispWorksについては

+0

あなたが探しているものは、MOPと呼ばれています。 – sds

+1

メソッドはクラスで定義されていません。それらは1つまたは複数の引数に従って汎用関数を特化します。クラスに特化した "set-"という名前のすべてのメソッドを最初の引数として見つけることができます。しかし、おそらくもっと重要な理由は? – coredump

+1

@coredump SETを使用していくつかのプロパティを設定しています。これらのプロパティ名を印刷する必要があります。それらのいくつかはスロットに保存されますが、スロットに保存されないプロパティがあるため、すべてのスロットを取得するだけでは不十分です。 –

答えて

2

- [メタオブジェクトプロトコル](http://mop.lisp.se/)

CL-USER 20 > (pprint (find-all-methods (find-class 'capi:button) "PRINT-")) 

(#<STANDARD-METHOD CAPI:PRINT-COLLECTION-ITEM NIL (CAPI:BUTTON T) 40E06173D3> 
#<STANDARD-METHOD CAPI:PRINT-CAPI-BUTTON NIL (CAPI:BUTTON) 40E05F9DDB>) 
関連する問題