在開發過程中,我定義了一個'initialize-instance:after'方法,這個方法在一段時間之後不再需要,並且實際上在我的方式中,因爲它內部調用了無效的代碼。由於unintern
函數沒有限定符的參數,有什麼辦法可以「解除」方法的符號限定符組合,這樣我就不必再次執行slime-restart-inferior-lisp並再次加載項目從頭開始?我該如何取消一個合格的方法?
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想出解決辦法,並從實例用於查找方法的Lisp HyperSpec http://clhs.lisp.se/Body/f_find_m.htm。
相關問題
- 1. 我該如何取消?
- 2. 我該如何取消Task.WhenAll?
- 3. 我應該如何測試一個方面的方法?
- 4. 在Flex中,我該如何創建一個無法取消選中的CheckBox?
- 5. 我該如何取消magit中的rebase?
- 6. 我該如何做一個Upsert表格?
- 7. 如何取消touchesMoved:withEvent:方法
- 8. 我該如何斷言一個方法只被調用一次?
- 9. 我該如何傳遞一個代理集合才能運行到方法中
- 10. 我該如何讓這個方法返回一個數組?
- 11. 我應該如何命名一個這樣做的方法......?
- 12. 我該如何測試一個只調用FormsAuthentication.SetAuthCookie()的方法?
- 13. 我該如何調用一個從Java獲取Hash的Ruby方法?
- 14. 獲取NoMethodError,我該如何定義這個方法?
- 15. 如何取消當前從另一個ActionResult方法運行的ActionResult方法?
- 16. 我應該何時取消/殺死一個線程?
- 17. 我該如何模擬easymock中的一個方法,該方法將返回其參數之一?
- 18. 我該如何禁止一個方法被觸發?
- 19. 我應該如何爲類數組編寫一個方法?
- 20. Scala - 我該如何做一個「assertThrows」方法?
- 21. 如何取消特定方法的@Before?
- 22. 我無法恢復我取消選擇的前一個單元格的屬性
- 23. 我的onUpgrade()方法應該如何?
- 24. 我該如何讓css適合我的內容沒有空格
- 25. 取消一個錯誤的合併
- 26. 如何將兩個方法合併成一個json格式的變量?
- 27. 我應該如何將兩個表合併爲一個SELECT?
- 28. 我該如何組織一個類的集合
- 29. 我該如何解析一個網站以獲取表格中的鏈接?
- 30. 如何取消onPause或onStop方法?
如果你希望對這種事情使用粘液檢查,請確保你的'黏液 - 貢獻'中有「粘液檢查員」。通用的煤泥檢查員沒有(至少在目前...)使這種功能容易訪問。 – dat 2016-09-21 18:46:23