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.