class Class

Klassen in Ruby sind First-Class-Objekte – jede ist eine Instanz der Klasse Class.

Normalerweise erstellst du eine neue Klasse mit

class Name
 # some code describing the class behavior
end

Wenn eine neue Klasse erstellt wird, wird ein Objekt vom Typ Class initialisiert und einer globalen Konstante (in diesem Fall Name) zugewiesen.

Wenn Name.new aufgerufen wird, um ein neues Objekt zu erstellen, wird standardmäßig die new-Methode in Class ausgeführt. Dies kann durch Überschreiben von new in Class demonstriert werden.

class Class
  alias old_new new
  def new(*args)
    print "Creating a new ", self.name, "\n"
    old_new(*args)
  end
end

class Name
end

n = Name.new

ergibt

Creating a new Name

Klassen, Module und Objekte sind miteinander verbunden. In der folgenden Abbildung stellen die vertikalen Pfeile die Vererbung dar und die Klammern Metaklassen. Alle Metaklassen sind Instanzen der Klasse „Class“.

                         +---------+             +-...
                         |         |             |
         BasicObject-----|-->(BasicObject)-------|-...
             ^           |         ^             |
             |           |         |             |
          Object---------|----->(Object)---------|-...
             ^           |         ^             |
             |           |         |             |
             +-------+   |         +--------+    |
             |       |   |         |        |    |
             |    Module-|---------|--->(Module)-|-...
             |       ^   |         |        ^    |
             |       |   |         |        |    |
             |     Class-|---------|---->(Class)-|-...
             |       ^   |         |        ^    |
             |       +---+         |        +----+
             |                     |
obj--->OtherClass---------->(OtherClass)-----------...