Each slot-description in a defstruct form may specify one or more slot-options. A
slot-option consists of a pair of a keyword and a value (which is not a form to be
evaluated, but the value itself). For example:
(defstruct ship
(x-position 0.0
:type short-float)
(y-position 0.0
:type short-float)
(x-velocity 0.0
:type short-float)
(y-velocity 0.0
:type short-float)
(mass *default-ship-mass*
:type short-float
:read-only t))
This specifies that each slot will always contain a short-format floating-point
number, and that the last slot may not be altered once a ship is constructed.
The available slot-options are as follows.
-
:type
The option :type type specifies that the contents of the slot will
always be of the specified data type. This is entirely analogous to the
declaration of a variable or function; indeed, it effectively declares the
result type of the access function. An implementation may or may not
choose to check the type of the new object when initializing or assigning
to a slot. Note that the argument form type is not evaluated; it must
be a valid type specifier.
-
:read-only
The option :read-only x, where x is not nil, specifies that this
slot may not be altered; it will always contain the value specified at
construction time. setf will not accept the access function for this slot.
If x is nil, this slot-option has no effect. Note that the argument form
x is not evaluated.
Note that it is impossible to specify a slot-option unless a default value is
specified first.