[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
4.1 Class Definition
define-class
(syntax)
-
class
(syntax)-
make-class
(procedure)-
make metaclass …
(generic)metaclass is the metaclass of the class being defined, either taken from the
#:metaclass
class option or computed byensure-metaclass
. The applied method must create and return the fully initialized class metaobject for the new class definition.
-
-
-
class-redefinition old-class new-class
(generic)define-class
callsclass-redefinition
if the variable specified by its first argument already held a GOOPS class definition. old-class and new-class are the old and new class metaobjects. The applied method should perform whatever is necessary to handle the redefinition, and should return the class metaobject that is to be bound todefine-class
's variable. The default class redefinition protocol is described in Class Redefinition.
The (make metaclass …)
invocation above will create
an class metaobject with metaclass metaclass. By default, this
metaobject will be initialized by the initialize
method that is
specialized for instances of type <class>
.
initialize <class> initargs
(method)
-
compute-cpl class
(generic)The applied method should compute and return the class precedence list for class as a list of class metaobjects. When
compute-cpl
is called, the following class metaobject slots have all been initialized:name
,direct-supers
,direct-slots
,direct-subclasses
(empty),direct-methods
. The value returned bycompute-cpl
will be stored in thecpl
slot. -
compute-slots class
(generic)The applied method should compute and return the slots (union of direct and inherited) for class as a list of slot definitions. When
compute-slots
is called, all the class metaobject slots mentioned forcompute-cpl
have been initialized, plus the following:cpl
,redefined
(#f
),environment
. The value returned bycompute-slots
will be stored in theslots
slot. -
compute-get-n-set class slot-def
(generic)initialize
callscompute-get-n-set
for each slot computed bycompute-slots
. The applied method should compute and return a pair of closures that, respectively, get and set the value of the specified slot. The get closure should have arity 1 and expect a single argument that is the instance whose slot value is to be retrieved. The set closure should have arity 2 and expect two arguments, where the first argument is the instance whose slot value is to be set and the second argument is the new value for that slot. The closures should be returned in a two element list:(list get set)
.The closures returned by
compute-get-n-set
are stored as part of the value of the class metaobject'sgetters-n-setters
slot. Specifically, the value of this slot is a list with the same number of elements as there are slots in the class, and each element looks either like(slot-name-symbol init-function . index)
or like
(slot-name-symbol init-function get set)
Where the get and set closures are replaced by index, the slot is an instance slot and index is the slot's index in the underlying structure: GOOPS knows how to get and set the value of such slots and so does not need specially constructed get and set closures. Otherwise, get and set are the closures returned by
compute-get-n-set
.The structure of the
getters-n-setters
slot value is important when understanding the next customizable generic functions thatinitialize
calls… -
compute-getter-method class gns
(generic)initialize
callscompute-getter-method
for each of the class's slots (as determined bycompute-slots
) that includes a#:getter
or#:accessor
slot option. gns is the element of the class metaobject'sgetters-n-setters
slot that specifies how the slot in question is referenced and set, as described above undercompute-get-n-set
. The applied method should create and return a method that is specialized for instances of type class and uses the get closure to retrieve the slot's value. [ *fixme Need to insert something here about checking that the value is not unbound. ]initialize
usesadd-method!
to add the returned method to the generic function named by the slot definition's#:getter
or#:accessor
option. -
compute-setter-method class gns
(generic)compute-setter-method
is invoked with the same arguments ascompute-getter-method
, for each of the class's slots that includes a#:setter
or#:accessor
slot option. The applied method should create and return a method that is specialized for instances of type class and uses the set closure to set the slot's value.initialize
then usesadd-method!
to add the returned method to the generic function named by the slot definition's#:setter
or#:accessor
option.
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |