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

Re: Correction

    Date: 24 Jul 87 09:38 PDT
    From: Gregor.pa@Xerox.COM

	From: Scott McKay <SWM@SAPSUCKER.SCRC.Symbolics.COM>
	Subject: Correction

	    Date: 23 Jul 1987 20:38-EDT

	     (I might add that Symbolics does not allow lexical
	    bindings around defmethods (not sure about TI); I hope they
	    will consider it.)

	Isn't this what instance variables are for?  In CLOS, methods
	get to choose what "slots" (CLOSpeak for "instance variable") they
	are allowed to access, so can get the "own variable" behavior you
	want that way.

    No, this kind of use of lexical variables is not at all the same as
    slots (instance variables).  Slots are a piece of storage which is
    associated with an object (in the case of class variables it can be more
    than one object).  Effectively that means that with respect to the body
    of the method slots are dynamic variables.  Needless to say, lexical
    variables around a defmethod aren't dynamic variables.  Here is what I
    think of as a prototypical example of methods using both a slot and a
    lexical variable.

Thanks for unconfusing me.

    (defclass plist-mixin ()
	((plist :initform ()
		:accessor plist)))

    (let ((mark (list "mark")))

      (defmethod mark  ((x plist-mixin))
	(setf (getf (plist x) mark) t))

      (defmethod markp ((x plist-mixin))
	(getf (plist x) mark))