Next: Defaulting of Initialization Arguments, Previous: Initialization Arguments, Up: Object Creation and Initialization
Initialization arguments are checked for validity in each of the four
situations that use them. An initialization argument may be valid in
one situation and not another. For example, the system-supplied
primary method for make-instance
defined for
the class standard-class
checks the validity of its initialization arguments
and signals an error if an initialization argument is supplied that is
not declared as valid in that situation.
There are two means for declaring initialization arguments valid.
defclass
. The
:initarg slot option is inherited from superclasses. Thus
the set of valid initialization arguments that fill slots for a
class is the union of the initialization arguments that fill
slots declared as valid by that class and its
superclasses. Initialization arguments that fill slots
are valid in all four contexts.
allocate-instance
, initialize-instance
, and
shared-initialize
. Initialization arguments declared as valid
by these methods are valid when making
an instance of a class.
reinitialize-instance
and shared-initialize
.
Initialization arguments declared as valid by these methods are
valid when re-initializing an instance.
update-instance-for-redefined-class
and shared-initialize
.
Initialization arguments declared as valid by these methods are
valid when updating an instance to conform to a redefined class.
update-instance-for-different-class
and shared-initialize
.
Initialization arguments declared as valid by these methods are
valid when updating an instance to conform to the definition
of a different class.
The set of valid initialization arguments for a class is the set of
valid initialization arguments that either fill slots or supply
arguments to methods, along with the predefined initialization
argument :allow-other-keys. The default value for
:allow-other-keys is nil
.
Validity checking of initialization arguments is disabled if the value of
the initialization argument :allow-other-keys is true.