0
클래스의 모든 메소드 이름을 LISP로 가져올 수 있습니까?LISP - 클래스의 모든 메소드 이름을 얻는다
는 사실은 내가 이름에 세트 -
이 메소드가 필요합니다. LispWorks를 들어
클래스의 모든 메소드 이름을 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라고 찾고 있습니다 - [metaobject를 프로토콜 (http://mop.lisp.se/). – sds
메소드가 클래스에 정의되어 있지 않습니다. 하나 이상의 인수에 따라 일반 함수를 특수화합니다. 첫 번째 인수로 클래스를 전문으로하는 "set-"이라는 메서드를 모두 찾고자 할 수 있습니다. 그러나 아마도 더 중요한 것은, 왜? – coredump
@coredump SET를 사용하여 일부 속성을 설정 중이므로 해당 속성 이름을 인쇄해야합니다. 그 중 일부는 슬롯에 저장되지만 슬롯에 저장되지 않는 속성이 있으므로 모든 슬롯을 확보하는 것만으로는 충분하지 않습니다. –