これが可能かどうかはわかりませんでしたが、(かなり醜い) 回避策を使用しました。
以下のようなクラス構造があるとします。
(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 の print-object 内にタイプ 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 で解決策を試す必要がありますか?