Slots can be accessed in two ways: by use of the primitive function
slot-value and by use of generic functions generated by
the defclass form.
The function slot-value can be used with any of the slot
names specified in the defclass form to access a specific
slot accessible in an instance of the given class.
The macro defclass provides syntax for generating methods to
read and write slots. If a reader method is requested,
a method is automatically generated for reading the value of the
slot, but no method for storing a value into it is generated.
If a writer method is requested, a method is automatically
generated for storing a value into the slot, but no method
for reading its value is generated. If an accessor method is
requested, a method for reading the value of the slot and a
method for storing a value into the slot are automatically
generated. Reader and writer methods are implemented using
slot-value.
When a reader or writer method is specified for a slot, the
name of the generic function to which the generated method
belongs is directly specified. If the name specified for the writer
method is the symbol name, the name of the
generic function for writing the slot is the symbol
name, and the generic function takes two arguments: the new
value and the instance, in that order. If the name specified
for the accessor method is the symbol name, the name of
the generic function for reading the slot is the symbol
name, and the name of the generic function for writing
the slot is the list (setf name).
A generic function created or modified by supplying :reader, :writer, or :accessor slot options can be treated exactly as an ordinary generic function.
Note that slot-value can be used to read or write the value of a
slot whether or not reader or writer methods exist for that
slot. When slot-value is used, no reader or writer
methods are invoked.
The macro with-slots can be used to establish a
lexical environment in which specified slots are lexically
available as if they were variables. The macro with-slots
invokes the function slot-value to access the specified slots.
The macro with-accessors can be used to establish a lexical
environment in which specified slots are lexically available through
their accessors as if they were variables. The macro with-accessors
invokes the appropriate accessors to access the specified slots.