Common Lisp the Language, 2nd Edition

Next: Inheritance Up: Classes Previous: Slots

### 28.1.2.4. Accessing 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