Common Lisp the Language, 2nd Edition
Next: Inheritance
Up: Classes
Previous: Slots
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 slot name
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 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
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 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 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 option 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 option 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. Any accessors specified by
with-accessors
must already have been defined before they
are used.
Next: Inheritance
Up: Classes
Previous: Slots
AI.Repository@cs.cmu.edu