[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)))))

Two problems with what you say:
1) After the call-next-method p1 is EQL to p2, and p1 is no longer an x y point.
2)  Even if this worked, it wouldn't work for a subclass of rho-theta point.