[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
3.2.4 Class Definition Internals
Implementation notes: define-class
expands to an expression which
- checks that it is being evaluated only at top level
- defines any accessors that are implied by the slot-definitions
-
uses
class
to create the new class (see section class) -
checks for a previous class definition for name and, if found,
handles the redefinition by invoking
class-redefinition
(see section Redefining a Class).
- syntax: class name (super …) slot-definition … . options
Return a newly created class that inherits from supers, with direct slots defined by slot-definitions and class options options. For the format of slot-definitions and options, see define-class.
Implementation notes: class
expands to an expression which
-
processes the class and slot definition options to check that they are
well-formed, to convert the
#:init-form
option to an#:init-thunk
option, to supply a default environment parameter (the current top-level environment) and to evaluate all the bits that need to be evaluated -
calls
make-class
to create the class with the processed and evaluated parameters.
- procedure: make-class supers slots . options
Return a newly created class that inherits from supers, with direct slots defined by slots and class options options. For the format of slots and options, see define-class, except note that for
make-class
, slots and options are separate list parameters: slots here is a list of slot definitions.
Implementation notes: make-class
-
adds
<object>
to the supers list if supers is empty or if none of the classes in supers have<object>
in their class precedence list -
defaults the
#:environment
,#:name
and#:metaclass
options, if they are not specified by options, to the current top-level environment, the unbound value, and(ensure-metaclass supers)
respectively (see section ensure-metaclass) - checks for duplicate classes in supers and duplicate slot names in slots, and signals an error if there are any duplicates
-
calls
make
, passing the metaclass as the first parameter and all other parameters as option keywords with values.
- procedure: ensure-metaclass supers env
Return a metaclass suitable for a class that inherits from the list of classes in supers. The returned metaclass is the union by inheritance of the metaclasses of the classes in supers.
In the simplest case, where all the supers are straightforward classes with metaclass
<class>
, the returned metaclass is just<class>
.For a more complex example, suppose that supers contained one class with metaclass
<operator-class>
and one with metaclass<foreign-object-class>
. Then the returned metaclass would be a class that inherits from both<operator-class>
and<foreign-object-class>
.If supers is the empty list,
ensure-metaclass
returns the default GOOPS metaclass<class>
.GOOPS keeps a list of the metaclasses created by
ensure-metaclass
, so that each required type of metaclass only has to be created once.The
env
parameter is ignored.
- procedure: ensure-metaclass-with-supers meta-supers
ensure-metaclass-with-supers
is an internal procedure used byensure-metaclass
(see section ensure-metaclass). It returns a metaclass that is the union by inheritance of the metaclasses in meta-supers.
The internals of make
, which is ultimately used to create the new
class object, are described in Customizing Instance Creation,
which covers the creation and initialization of instances in general.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |