[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: CLASS-CHANGED and UPDATE-OBSOLETE-INSTANCE
- To: kempf%hplabsz@hplabs.HP.COM
- Subject: Re: CLASS-CHANGED and UPDATE-OBSOLETE-INSTANCE
- From: Danny Bobrow <Bobrow.pa@Xerox.COM>
- Date: 1 Oct 87 11:01 PDT
- Cc: Bobrow.pa@Xerox.COM, common-lisp-object-system@sail.stanford.edu
- In-reply-to: kempf%hplabsz@hplabs.HP.COM's message of Thu, 01 Oct 87 11:16:44 MDT
- Sender: Bobrow.pa@Xerox.COM
> 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.