2013-01-11 22 views
6

特定の型に特化したすべての関数を見つける方法はありますか? 特定の型を特化するすべてのメソッドを見つける

は、私はあなたが (find-all-specializing-methods 'my-class)ようREPLから実行することが可能なものを想像し、それは私がMOP自体はおそらく、このような保存する必要があるので、これを行うための簡単な方法がなければならないと思います (mypackage1:my-method-1 my-package2:my-method-2 etc.)

のようなメソッドのリストを返しますどのメソッドを呼び出すかを決定するためのリスト。

+2

MOPにはそれほど必要なものはありません。 CLOSは、COMPUTE-APPLICABLE-METHODSを使用します。 –

+0

@wvxvw私の目的のために十分に近い、ありがとう、答えとして投稿してください。私はそれを受け入れるでしょう – tjb

答えて

5

slime-who-specializesに目を通して、設定する方法を見つけることができます。

は定義に続いて、私はこれまでのように、ここで(SBCL用)得た:

#+#.(swank-backend::sbcl-with-xref-p) 
(progn 
    (defmacro defxref (name &optional fn-name) 
    `(defimplementation ,name (what) 
     (sanitize-xrefs 
     (mapcar #'source-location-for-xref-data 
       (,(find-symbol (symbol-name (if fn-name 
               fn-name 
               name)) 
           "SB-INTROSPECT") 
        what))))) 
    (defxref who-calls) 
    (defxref who-binds) 
    (defxref who-sets) 
    (defxref who-references) 
    (defxref who-macroexpands) 
    #+#.(swank-backend:with-symbol 'who-specializes-directly 'sb-introspect) 
    (defxref who-specializes who-specializes-directly)) 

この機能は、異なるのLispのために別々に実装されているので、あなたは、特定の詳細が必要な場合は、あなたがに調べる必要があります:swank-<your lisp>.lispファイルとwho-specializes汎用関数の実装を検索します。

+0

誰かがこれをもう少し打ち破ることができますか? SWANK/BACKEND :: SBCL-WITH-XREF-P関数は定義されていません。エラーが発生していない場合でも、関連する部分を理解したいと思います。 – lindes

関連する問題