Common Lisp the Language, 2nd Edition
![]()
Next: Initialization
Arguments Up: Programmer
Interface Concepts Previous: Standard Meta-objects

The generic function make-instance creates and returns a
new instance of a class. The first argument is a class or the name of a
class, and the remaining arguments form an initialization
argument list.
The initialization of a new instance consists of several distinct
steps, including the following: combining the explicitly supplied
initialization arguments with default values for the unsupplied
initialization arguments, checking the validity of the initialization
arguments, allocating storage for the instance, filling slots with
values, and executing user-supplied methods that perform additional
initialization. Each step of make-instance is implemented
by a generic function to provide a mechanism for customizing that step.
In addition, make-instance is itself a generic function and
thus also can be customized.
The Object System specifies system-supplied primary methods for each step and thus specifies a well-defined standard behavior for the entire initialization process. The standard behavior provides four simple mechanisms for controlling initialization:
:initarg
slot option to defclass. This provides a mechanism for
supplying a value for a slot in a call to
make-instance.:default-initargs class option to
defclass. If an initialization argument is not explicitly
provided as an argument to make-instance, the default value
form is evaluated in the lexical environment of the
defclass form that defined it, and the resulting value is
used as the value of the initialization argument.:initform
slot option to defclass. If no initialization argument
associated with that slot is given as an argument to
make-instance or is defaulted by
:default-initargs, this default initial value form is
evaluated in the lexical environment of the defclass form
that defined it, and the resulting value is stored in the slot. The
:initform form for a local slot may be used when creating
an instance, when updating an instance to conform to a redefined class,
or when updating an instance to conform to the definition of a different
class. The :initform form for a shared slot may be used
when defining or re-defining the class.initialize-instance and
shared-initialize. The slot-filling behavior described
above is implemented by a system-supplied primary method for
initialize-instance which invokes
shared-initialize. The generic function
shared-initialize implements the parts of initialization
shared by these four situations: when making an instance, when
re-initializing an instance, when updating an instance to conform to a
redefined class, and when updating an instance to conform to the
definition of a different class. The system-supplied primary method for
shared-initialize directly implements the slot-filling
behavior described above, and initialize-instance simply
invokes shared-initialize.
![]()
Next: Initialization
Arguments Up: Programmer
Interface Concepts Previous: Standard Meta-objects
AI.Repository@cs.cmu.edu