defclass

Die Funktion defclass erzeugt Klassen (siehe Klasse). Sie wertet ihre beiden Argumente nicht aus. Beim ersten Argument handelt es sich um den Namen der Klasse (ein Symbol).

Das zweite Argument ist eine eventuell leere Liste mit den Namen der Superklassen oder den Namen der zu kombinierenden Merkmale. Die Reihenfolge der Klassen oder Merkmale in dieser Liste wirkt sich auf die Auswahl der spezifischsten Methode beim Methodenaufruf aus (siehe call-next-method).

In der Liste darf nicht eine Klasse und eine ihrer direkten oder indirekten Sub- oder Superklassen vorkommen. Auch darf ein und dieselbe Klasse nicht mehrfach auftreten. Das gilt analog auch für Merkmale.

Ein Aufruf von defclass erzeugt die gewünschte Klasse und bindet sie an den Namen. Es wird eine Ausnahme geworfen, wenn der Name bereits an einen Wert ungleich nil gebunden ist.

Ebenso wird eine Ausnahme geworfen, wenn die Klassendefinition dazu führt, dass zwei Methoden in Konflikt geraten (siehe Merkmal).

Im Unterschied zu Merkmalen lassen sich von Klassen Instanzen erzeugen (siehe allocate-instance).

> (type-of (defclass thing ()))
class

> (type-of thing)
class