LISP - 从类中获取所有方法名称

时间:2016-12-06 20:17:07

标签: methods lisp common-lisp clos

我可以从LISP中获取课程中的所有方法名称吗?

实际上我需要的方法有

  

组 -

以他们的名字命名。

1 个答案:

答案 0 :(得分:2)

对于LispWorks:

(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))

示例:

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>)
相关问题