개발하는 동안 'initialize-instance : after'메서드를 정의했습니다.이 메서드는 더 이상 필요 없으며 실제로는 유효하지 않은 코드를 호출하기 때문에 실제로는 방해가됩니다. unintern
함수에는 한정자에 대한 인수가 없으므로 slime-restart-inferior-lisp를 수행 할 필요가 없도록 메서드의 기호 한정자 조합을 "unintern"할 수있는 방법이 있습니까? 출발점에서?정규화 된 메소드를 어떻게 사용할 수 있습니까?
8
A
답변
15
당신은 find-method
및 remove-method
그것을 할 표준 기능을 사용할 수 있습니다 :
(remove-method (find-method #'frob '(:before) '(vehicle t)))
나는 그것이 점액 관리자를 사용하는 것이 훨씬 쉽게 찾을 수 있습니다. 기능 이름이 frob
인 경우 M-x slime-inspect #'frob RET
을 사용하면 frob
에있는 모든 방법 목록을보고 제거 방법을 개별적으로 선택할 수 있습니다.
5
Xach의 답변보기.
메소드는 일반 함수로 수집됩니다. UNINTERN은 그 일과 관련이 없습니다. 원하는 것은 제네릭 함수에서 메서드를 제거하는 것입니다.
가장 일반적인 Lisp IDE에는이를 수행하는 방법이 있습니다. 편집기 (M-x undefine ...) 또는 일부 검사기 도구를 사용하십시오.
0
AllegroCL 9.0. Xach의 대답은 나를 위해 완전히 작동하지 않았습니다.
내 방법의 정의 :
defmethod my-method* ((expr forall-expr) bindings)
는 FORALL-EXPR 클래스이며, 바인딩 해제 입력입니다.
다음(find-method #'my-method* '() (mapcar #'find-class '(forall-expr t)))
내가 사용하는 방법의 정의를 제거 : 방법을 찾기 위해 내가 사용했다
(remove-method #'my-method* (find-method #'my-method* '() (mapcar #'find-class '(forall-expr t))))
나는 http://www.gigamonkeys.com/book/object-reorientation-classes.html에서 각주 7에서이 알아낼 수 있었다 예에서 find-method에 대한 Lisp HyperSpec http://clhs.lisp.se/Body/f_find_m.htm.
이런 종류의 slime-inspect를 사용하려면'slime-contribs'에 "slime-fancy-inspector"가 있는지 확인하십시오. 일반적인 점액 검사기는 (적어도 현재는 ...) 이러한 종류의 기능을 쉽게 이용할 수 있도록합니다. – dat