[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
8.11.8 Method Definition Internals
define-method
:
-
checks the form of the first parameter, and applies the following steps
to the accessor’s setter if it has the
(setter …)
form -
interpolates a call to
define-generic
ordefine-accessor
if a generic function is not already defined with the supplied name -
calls
method
with the parameters and body, to make a new method instance -
calls
add-method!
to add this method to the relevant generic function.
- syntax: method (parameter …) body …
Make a method whose specializers are defined by the classes in parameters and whose procedure definition is constructed from the parameter symbols and body forms.
The parameter and body parameters should be as for
define-method
(see section define-method).
method
:
-
extracts formals and specializing classes from the parameters,
defaulting the class for unspecialized parameters to
<top>
- creates a closure using the formals and the body forms
-
calls
make
with metaclass<method>
and the specializers and closure using the#:specializers
and#:procedure
keywords.
- procedure: make-method specializers procedure
Make a method using specializers and procedure.
specializers should be a list of classes that specifies the parameter combinations to which this method will be applicable.
procedure should be the closure that will applied to the generic function parameters when this method is invoked.
make-method
is a simple wrapper around make
with metaclass
<method>
.
- method: add-method! (generic <generic>) (method <method>)
Add method method to the generic function generic.
- method: add-method! (proc <procedure>) (method <method>)
If proc is a procedure with generic capability (see section generic-capability?), upgrade it to a primitive generic and add method to its generic function definition.
- method: add-method! (pg <primitive-generic>) (method <method>)
Add method method to the generic function definition of pg.
Implementation:
(add-method! (primitive-generic-generic pg) method)
.
- method: add-method! (whatever <top>) (method <method>)
Raise an error indicating that whatever is not a valid generic function.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on April 20, 2013 using texi2html 5.0.