0
A
回答
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>)
你要找的是所謂MOP - [元對象協議(http://mop.lisp.se/)。 – sds
方法沒有在類上定義。它們根據一個或多個參數專門化泛型函數。您可能希望找到名爲「set-」的所有方法,這些方法專門針對該類作爲第一個參數。但也許更重要的是,爲什麼? – coredump
@coredump使用SET我正在設置一些屬性,我需要打印這些屬性名稱。它們中的一些被保存在插槽中,但是有些屬性沒有保存在插槽中,所以獲得所有插槽是不夠的。 –