[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: CLASS-CHANGED and UPDATE-OBSOLETE-INSTANCE



> Yes.  First, it is possible to specialize class-changed on the basis of
> both classes, and secondly, one can use methods on the class of the
> first (previous) object e.g.
> (defmethod class-changed ((p1 x-y-point) (p2 rho-theta-point)) 
>   (with-slots (p2 rho theta)
>      (setf rho   (rho p1)
>            theta (theta p1))))
>  
> (defclass class-changed ((v1 directed-vector) (p rho-theta-point))
>    ...)

One could do the same thing as:

(defmethod change-class 
  ((p1 x-y-point) (class (eql (class-named 'rho-theta-point))))

  (let
    ( (p2 (call-next-method)) )

    (with-slots (p2 rho theta)
      (setf rho (rho p1))
      (setf theta (theta p1)))))

(defmethod class-changed 
  ((v1 directed-vector) (class (eql (class-named 'rho-theta-point))))

      ...

)