2013-01-11 32 views
6

क्या किसी दिए गए प्रकार पर विशेषज्ञता रखने वाले सभी कार्यों को ढूंढने का कोई तरीका है?किसी दिए गए प्रकार को विशेषज्ञता देने वाले सभी विधियों को ढूंढें

मैं कुछ आप (find-all-specializing-methods 'my-class) तरह repl से निष्पादित कर सकता है कल्पना और यह (mypackage1:my-method-1 my-package2:my-method-2 etc.)

तरह के तरीकों की एक सूची वापस होगा मुझे लगता है कि क्योंकि एमओपी ही शायद एक ऐसे संग्रहीत करना होता है ऐसा करने के लिए एक आसान तरीका होना चाहिए यह तय करने के लिए सूची कि कॉल करने के लिए कौन सी विधियां हैं।

+2

एमओपी को वास्तव में इसकी आवश्यकता नहीं है। 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)) 

इस कार्यशीलता इसलिए यदि आप विशेष विवरण की जरूरत है, तो आप इस पर गौर करने की आवश्यकता होगी, अलग Lisps के लिए अलग से लागू किया गया है: swank-<your lisp>.lispwho-specializes जेनेरिक फ़ंक्शन के कार्यान्वयन के लिए फ़ाइल और खोज करें।

+0

कोई भी मौका यह किसी और को तोड़ सकता है? मुझे अपनी कीचड़ में इसे प्लग करने की कोशिश करने में त्रुटि हुई: 'फ़ंक्शन स्वैंक/बैकेंड :: एसबीसीएल-साथ-एक्सआरईएफ-पी अनिर्धारित है।' मुझे यह त्रुटि भी नहीं मिली है, मैं प्रासंगिक टुकड़ों को बेहतर ढंग से समझना चाहता हूं । – lindes