0
Могу ли я получить в LISP все имена методов из класса?LISP - получить все имена методов из класса
На самом деле мне нужны методы, которые имеют
комплект-
в их именах.
Могу ли я получить в LISP все имена методов из класса?LISP - получить все имена методов из класса
На самом деле мне нужны методы, которые имеют
комплект-
в их именах.
Для 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 using SET Я устанавливаю некоторые свойства, и мне нужно распечатать эти имена свойств. Некоторые из них сохраняются в слотах, но есть свойства, которые не сохраняются в слотах, поэтому получить все слоты недостаточно. –