Я не мог узнать, возможно ли это, и просто использовал (довольно уродливый) обходной путь.
Предположим, у нас есть структура класса, как показано ниже:
(defclass a () ())
(defclass b (a) ())
и метод:
(defmethod print-object ((a1 a) stream)
(format stream "instance of A "))
теперь я хочу вызвать print для 'a, а затем print для 'b, предполагая, что существует функция "приведения типов":
(defmethod print-object ((b1 b) stream)
(prin1 (type-cast b1 'a) stream)
(format stream "instance of B "))
Мой обходной путь - создать объект типа a внутри объекта печати b, а затем вызвать prin1
(defmethod print-object ((b1 b) stream)
(let ((a1 (make-instance 'a)))
(prin1 a1 stream))
(format stream "instance of B "))
Я пробовал принуждать и получил бесконечный цикл. Я только что понял, что могу попробовать использовать метод поиска и метод вызова (будет ли это работать?). Или я должен попробовать решение с: вокруг?