2011-05-12 24 views
8

Geliştirme sırasında, bir süreden sonra artık gerekli olmayan ve aslında artık geçerli olmayan kodları çağırdığı için aslında benim yoluma çıkan bir 'initialize-instance: after' yöntemi tanımladım. unintern işlev niteleyici için bir argümanı olmadığından, bir yöntemin simge-niteleyici birleşimini "unintern" hale getirmenin herhangi bir yolu var, böylece slime-restart-inferior-lisp zorunda kalmam ve projeyi tekrar yükle başından beri?Kalifiye bir yöntemi nasıl kullanabilirim?

cevap

15

Sen find-method ve remove-method bunu yapmak için standart işlevleri kullanabilirsiniz:

(remove-method (find-method #'frob '(:before) '(vehicle t))) 

Ben balçık müfettiş kullanmak çok daha kolay bulabilirsiniz. İşleviniz frob olarak adlandırılırsa, frob'daki tüm yöntemlerin bir listesini görmek için M-x slime-inspect #'frob RET öğelerini kullanabilir ve kaldırma için ayrı ayrı yöntemler kullanabilirsiniz.

+0

Bu tür bir şey için balçık muayenesini kullanmayı umuyorsanız, "slime-contribs" inizde "sümük-fantezi-denetçisine" sahip olduğunuzdan emin olun. Jenerik balçık denetçisi (en azından şu anda ...) bu tür işlevselliği kolayca erişilebilir yapmaz. – dat

5

Xach. Metotlar genel fonksiyonlarda toplanmaktadır. UNINTERN bununla hiçbir ilgisi yok. İstediğiniz, genel bir işlevden bir yöntemi kaldırmaktır.

En Yaygın Lisp IDE'lerinin bunu yapmanın bir yolu vardır. Ya editör (M-x undefine ...) veya bazı denetleyici araçları ile.

0

AllegroCL 9.0 ile. Xach'ın cevabı tamamen benim için işe yaramadı.

benim yöntemin tanımı:

defmethod my-method* ((expr forall-expr) bindings) 

forall-expre bir sınıftır ve bağlamaları un-daktilo olduğunu.

Sonra
(find-method #'my-method* '() (mapcar #'find-class '(forall-expr t))) 

kullandığım yöntemin tanımını kaldırmak için: yöntemini bulmak için ben kullanmak zorunda

(remove-method #'my-method* (find-method #'my-method* '() (mapcar #'find-class '(forall-expr t)))) 

Ben http://www.gigamonkeys.com/book/object-reorientation-classes.html de dipnot 7'den bu anlamaya başardı ve örnekler arasından Bulma yöntemi http://clhs.lisp.se/Body/f_find_m.htm için Lisp HyperSpec.

İlgili konular