[pro] Initialization of shared slots

rm at tuxteam.de rm at tuxteam.de
Wed Jan 5 18:04:28 UTC 2011


On Wed, Jan 05, 2011 at 06:15:34PM +0100, Didier Verna wrote:
> 
> Tim Bradshaw pointed out that my message was not very clear because the
> test I gave does not demonstrate that an initform's result is used to
> initialize the slot early, only at which time a slot is initialized.
> 
> This on the other hand gets closer to the point:
> 
> (defclass test ()
>   ((slot :allocation :class :initform t :initarg :slot)))
> 
> (defmethod initialize-instance :before ((test test) &key)
> 	   (format t "Slot value: ~A~%" (slot-value test 'slot)))
> 
> 
> Fresh SBCL:
> CL-USER> (make-instance 'test)
> Slot value: T
> #<TEST {B8115E1}>
> 
> Fresh SBCL again:
> CL-USER> (make-instance 'test :slot nil)
> Slot value: T
> #<TEST {B92AC89}>
> 
> So it appears that even when an initarg is provided, the slot is still
> initialized to the iniform value prior to anything else.

Ecuse my ignorance, but what are you testing? During your second
make-instance call the (initialize-instance :before  ...) method is
_not_ picking up the initform but the actual slot value from the class
(remember: slot has class allocation and it's value gets initialized in
the first invocation of make-instance 'test).

 Cheers, Ralf Mattes

> -- 
> Resistance is futile. You will be jazzimilated.
> 
> Scientific site:   http://www.lrde.epita.fr/~didier
> Music (Jazz) site: http://www.didierverna.com
> 
> _______________________________________________
> pro mailing list
> pro at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/pro




More information about the pro mailing list