The class100, class100*, and
class100*/names forms provide a syntax close to that of
class, class*, and class*/names in
MzScheme versions 100 through 103, but with the semantics of the
current class.ss system (see Chapter 3). For a
class defined with class100, keyword-based initialization
arguments can be propagated to the superclass, but by-position
arguments are not (i.e., the expansion of class100 to
class always includes an init-rest clause).
The class100*/names form creates a new class:
(class100*/nameslocal-namessuperclass-expr (interface-expr···) initialization-variablesclass100-clause···)
local-names is one of
(this-variablesuper-make-object-variable)
(this-variablesuper-make-object-variablesuper-instanitate-variable)
initialization-variables is one of
variable
(variable···variable-with-default···)
(variable···variable-with-default··· . variable)
variable-with-default is
(variabledefault-value-expr)
class100-clause is one of
(sequenceexpr···)
(publicpublic-method-declaration···)
(overridepublic-method-declaration···)
(privateprivate-method-declaration···)
(private-fieldprivate-var-declaration···)
(inheritinherit-method-declaration···)
(renamerename-method-declaration···)
public-method-declaration is one of
((internal-variableexternal-variable) method-procedure)
(variablemethod-procedure)
private-method-declaration is one of
(variablemethod-procedure)
private-var-declaration is one of
(variableinitial-value-expr)
(variable)
variableinherit-method-declaration is one of
variable
(internal-instance-variableexternal-inherited-variable)
rename-method-declaration is
(internal-variableexternal-variable)
In local-names, if super-instaniate-variable is not
provided, the instantiate-like superclass initialization form
will not be available in the class100*/names body.
The class100* macro avoids specifying local-names,
instead implicitly binding this and super-init (and
nothing for super-instaniate-variable).