我不知道这是否可能,只是使用了一个(相当丑陋的)解决方法。
假设我们有一个类结构如下:
(defclass a () ())
(defclass b (a) ())
和方法:
(defmethod print-object ((a1 a) stream)
(format stream "instance of A "))
现在,我想为 'a 调用 print,然后为 'b 调用 print,假设存在“类型转换”函数:
(defmethod print-object ((b1 b) stream)
(prin1 (type-cast b1 'a) stream)
(format stream "instance of B "))
我的解决方法是在 b 的打印对象中创建一个类型为 a 的对象,然后调用 prin1
(defmethod print-object ((b1 b) stream)
(let ((a1 (make-instance 'a)))
(prin1 a1 stream))
(format stream "instance of B "))
我尝试强制并以无限循环结束。我刚刚意识到我可以尝试使用 find-method 和 call-method(它会工作吗?)。或者我应该尝试使用 :around 的解决方案?