特定の型に特化したすべての関数を見つける方法はありますか?
repl のように実行できるものを想像すると、次の(find-all-specializing-methods 'my-class)
ようなメソッドのリストが返されます(mypackage1:my-method-1 my-package2:my-method-2 etc.)
MOP 自体が、呼び出すメソッドを決定するためにそのようなリストを保存する必要があるため、これを行う簡単な方法があるに違いないと思います。
特定の型に特化したすべての関数を見つける方法はありますか?
repl のように実行できるものを想像すると、次の(find-all-specializing-methods 'my-class)
ようなメソッドのリストが返されます(mypackage1:my-method-1 my-package2:my-method-2 etc.)
MOP 自体が、呼び出すメソッドを決定するためにそのようなリストを保存する必要があるため、これを行う簡単な方法があるに違いないと思います。
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