When specifying a slot, a set of options can be given to the system. Each option is specified with a keywordkeyword. The list of authorised keywords is given below:
To illustrate slot description, we shall redefine the <complex> class
seen before. A definition could be:
With this definition, the r and i slot are set to 0 by default.
Value of a slot can also be specified by calling make with
the :r and :i keywords. Furthermore, the generic functions get-r
and set-r! (resp. get-i and set-i!) are automatically defined
by the system to read and write the r (resp. i) slot.
Accessors provide an uniform access for reading and writing an object slot.
Writing a slot is done with an extended form of set!set!
which is close to the Common Lisp setf macro. So, another definition of the
previous <complex> class, using the :accessor option, could be:
Using this class definition, reading the real part of the c complex can
be done with:
and setting it to the value contained in the new-value variable
can be done using the extended form of set!.
Suppose now that we have to manipulate complex numbers with rectangular coordinates as well as with polar coordinates. One solution could be to have a definition of complex numbers which uses one particular representation and some conversion functions to pass from one representation to the other. A better solution uses virtual slots. A complete definition of the <complex> class using virtual slots is given in Figure 2.
This class definition implements two real slots (r and i). Values
of the m and a virtual slots are calculated from real slot
values. Reading a virtual slot leads to the application of the function
defined in the :slot-ref:slot-ref option. Writing such a slot
leads to the application of the function defined in the :slot-set!:slot-set! option.
For instance, the following expression
permits to set the angle of the c complex number. This expression
conducts, in fact, to the evaluation of the following expression
A more complete example is given below:
Since initialization keywords have been defined for the four slots, we
can now define the make-rectangular and make-polar
standard Scheme primitives.