2013-01-11 3 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에 대한) 멀리 여기 너무 가지고 :

당신이 특정 세부 사항을 필요로하는 경우, 당신은 조사 할 필요가 있으므로이 기능은 다른 Lisps에 대해 개별적으로 구현
#+#.(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)) 

: swank-<your lisp>.lisp 파일 및 who-specializes 일반 기능의 구현을 검색하십시오.

+0

누군가가이 문제를 좀더 해결할 수 있을까요? SWANK/BACKEND :: SBCL-WITH-XREF-P 함수는 정의되지 않았습니다. 오류가 발생하지 않았을지라도 관련 조각을 더 잘 이해하고 싶습니다. . – lindes

관련 문제