2
有沒有辦法從Common Lisp的通用函數中提取方法列表?
例如:Common Lisp:從通用函數中提取方法
(defmethod say ((self string)) ; method-0
(format t "Got string: ~a~%" self))
(defmethod say ((self integer)) ; method-1
(format t "Got integer: ~a~%" self))
(defmethod say ((self symbol)) ; method-2
(format t "Got symbol: ~a~%" self))
(extract-methods-from-generic 'say) ; -> (method-0-obj method-1-obj method-2-obj)
更具體地講,我針對ECL,所以如果這可以通過C API來完成 - 這是確定。
我需要這個做下一招:
(defgeneric merged-generic())
(loop for method
in (extract-methods-from-generic 'some-generic-0)
do (add-method merged-generic method))
(loop for method
in (extract-methods-from-generic 'some-generic-1)
do (add-method merged-generic method))
好了,但有可能「克隆」的方法及複印件連接到另一個通用功能? – AlexDarkVoid
你可以看看這個問題的答案:http://stackoverflow.com/questions/11067899/is-there-a-generic-method-for-cloning-clos-objects – Renzo
@Renzo這clonig一個對象。他想在兩種通用方法之間進行合併而不破壞原文,這是在這個答案中完成的。也許人們可以以某種方式代理它? – Sylwester