Bücher online kostenlos Kostenlos Online Lesen
Die Programmiersprache Ruby (German Edition)

Die Programmiersprache Ruby (German Edition)

Titel: Die Programmiersprache Ruby (German Edition) Kostenlos Bücher Online Lesen
Autoren: David Flanagan , Yukihiro Matsumoto
Vom Netzwerk:
Modul selbst an den ladenden Code zurückzugeben:
if Module.nesting.size > 0 # Wenn wir in einem umhüllenden Modul sind ...
$wrapper = Module.nesting[0] # ... übergib das Modul zurück an den ladenden Code
end
    Siehe „8.1.1 Vorfahren und Module“ für mehr Informationen zu
Module.nesting
.
    7.6.3 Module automatisch laden
    Die Methoden
autoload
in
Kernel
und
Module
ermöglichen ein verzögertes Laden von Dateien bei Bedarf. Die globale Funktion
autoload
erlaubt Ihnen, den Namen einer nicht definierten Konstante (üblicherweise ein Klassen- oder Modulname) und den Namen einer Bibliothek zu registrieren, die diese definiert. Wenn man die Konstante das erste Mal referenziert, wird die angegebene Bibliothek per
require
geladen, zum Beispiel:
# 'socket' laden, wenn TCPSocket das erste Mal verwendet wird
autoload :TCPSocket, "socket"
    Die Klasse
Module
definiert ihre eigene Version von
autoload
. Die nicht definierte Konstante im ersten Parameter wird dabei relativ zum Modul interpretiert.
    Nutzen Sie
autoload?
oder
Module.autoload?
, um zu prüfen, ob eine Referenz auf eine Konstante dazu führt, dass eine Datei geladen wird. Diese Methode erwartet ein Symbol als Argument. Führt eine Verwendung der Konstanten tatsächlich zum Laden einer Datei, wird durch
autoload?
der Name dieser Datei zurückgegeben. Ansonsten (wenn kein automatisches Laden eingetragen wurde oder die Datei schon geladen wurde) liefert
autoload?
den Wert
nil
zurück.

7.7 Singleton-Methoden und die Eigenklasse
    Sie haben in Kapitel 6 erfahren, dass es möglich ist, Singleton-Methoden zu definieren — also Methoden, die nur für ein einzelnes Objekt und nicht für eine Klasse von Objekten definiert sind. Um eine Singleton-Methode
sum
für ein Objekt
Point
zu definieren, schreiben wir
def Point.sum
# Methodenrumpf
end
    Wie schon weiter oben in diesem Kapitel erwähnt, handelt es sich bei den Klassenmethoden einer Klasse um nichts anderes als Singleton-Methoden derjenigen
Class
-Instanz, die diese Klasse repräsentiert.
    Die Singleton-Methoden eines Objekts werden nicht durch die Klasse dieses Objekts definiert. Aber es handelt sich um Methoden, und sie müssen irgendwie mit einer Klasse in Verbindung gebracht werden. Die Singleton-Methoden eines Objekts sind Instanzmethoden der anonymen Eigenklasse , die mit diesem Objekt verbunden ist. (Auf Englisch heißt sie tatsächlich auch Eigenclass, vom deutschen »eigen«.) Die Eigenklasse wird auch als Singleton-Klasse oder (seltener) als die Metaklasse bezeichnet. Der Begriff »Eigenklasse« ist in der Ruby-Community nicht allgemein anerkannt, aber in diesem Buch ist er der Begriff unserer Wahl.
    Ruby definiert eine Syntax für das Öffnen der Eigenklasse eines Objekts, um Methoden hinzuzufügen. Damit erhält man eine Alternative zur Definition von mehreren Singleton-Methoden, die sonst jeweils einzeln hinzugefügt werden müssten — wir können stattdessen eine beliebige Zahl von Instanzmethoden der Eigenklasse definieren. Um die Eigenklasse des Objekts
o
zu öffnen, verwenden Sie
class << o
. So können wir zum Beispiel Klassenmethoden von
Point
so definieren:
class << Point
def class_method1 # Dies ist eine Instanzmethode der Eigenklasse
end # Und gleichzeitig eine Klassenmethode von Point
def class_method2
end
end
    Wenn Sie die Eigenklasse eines Klassenobjekts innerhalb der Definition einer Klasse selbst öffnen, können Sie
self
nutzen, statt den Namen der Klasse wiederholen zu müssen. Um ein in diesem Kapitel schon verwendetes Beispiel nochmals zu nutzen:
class Point
# Hier stehen die Instanzmethoden.
class << self
    # Hier stehen Klassenmethoden als Instanzmethoden der Eigenklasse.
end
end
    Seien Sie mit Ihrer Syntax vorsichtig. Beachten Sie, dass es einen deutlichen Unterschied zwischen den folgenden drei Zeilen gibt:
class Point # Erstelle oder öffne die Klasse Point
class Point3D < Point # Erzeuge eine Subklasse von Point
class << Point # Öffne die Eigenklasse des Objekts Point
    Im Allgemeinen ist es übersichtlicher, Klassenmethoden als individuelle Singleton-Methoden zu definieren, ohne explizit die Eigenklasse zu öffnen.
    Wenn Sie die Eigenklasse eines Objekts öffnen, bezieht sich
self
auf das Eigenklassen-Objekt. Um die Eigenklasse eines Objekts
o
zu erhalten, schreibt man also
eigenclass = class << o; self; end
    Wenn wir dies in eine Methode von
Object
umsetzen, können wir nach der Eigenklasse eines beliebigen Objekts fragen:
class Object
def eigenclass
    class << self; self;

Weitere Kostenlose Bücher