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:
Dadurch wird die Standard-
require
-Methode durch eine neue Version ersetzt, die weiß, wo sie nach installierten Gems zu suchen hat. Siehe „1.2.5 Ruby-Paketmanagement mit gem“ für mehr Informationen über RubyGems.
    Sie können ein neues Verzeichnis an den Anfang von Rubys Suchpfad anfügen, indem Sie die Befehlszeilenoption
-I
des Ruby-Interpreters nutzen. Mehrere Verzeichnisse lassen sich durch mehrfachen Einsatz von
-I
oder durch ein einzelnes
-I
und eine Trennung der verschiedenen Verzeichnisse mit einem Doppelpunkt eintragen (unter Windows mit einem Semikolon).
    Ruby-Programme können auch ihren eigenen Load-Path anpassen, indem sie den Inhalt des Array
$LOAD_PATH
verändern. Hier sehen Sie ein paar Beispiele:
# Entferne das aktuelle Verzeichnis aus dem Load-Path
$:.pop if $:.last == '.'
# Füge das Installationsverzeichnis des aktuellen Programms
# am Anfang des Load-Path ein
$LOAD_PATH.unshift File.expand_path($PROGRAM_NAME)
# Füge den Wert einer Umgebungsvariablen am Ende des Pfades ein
$LOAD_PATH << ENV['MY_LIBRARY_DIRECTORY']
    Schließlich sollten Sie daran denken, dass Sie den Load-Path komplett umgehen können, indem Sie
load
oder
require
absolute Pfade übergeben (die mit / oder ~ beginnen).
    7.6.2 Geladenen Code ausführen
    load
und
require
führen den Code in der angegebenen Datei sofort aus. Der Aufruf dieser Methoden führt allerdings nicht unbedingt zu den gleichen Ergebnissen wie ein einfaches Ersetzen von
load
oder
require
durch den Code in der Datei. [ 29 ]
    Dateien, die mit
load
oder
require
geladen wurden, werden in einem neuen Gültigkeitsbereich auf oberster Ebene ausgeführt, der sich von dem Bereich unterscheidet, in dem
load
oder
require
aufgerufen wurden. Die geladene Datei kann alle globalen Variablen und Konstanten sehen, die zum Zeitpunkt des Ladens definiert waren, aber sie hat keinen Zugriff auf den lokalen Gültigkeitsbereich, aus dem der Load angestoßen wurde. Das hat unter anderem diese Folgen:
    Die lokalen Variablen, die in dem Gültigkeitsbereich definiert wurden, in dem
load
oder
require
aufgerufen wurden, sind für die geladene Datei nicht sichtbar.
Alle lokalen Variablen, die von der geladenen Datei erzeugt wurden, werden nach dem Abschluss des Ladens verworfen — sie sind niemals außerhalb der Datei sichtbar, in der sie definiert wurden.
Am Anfang der geladenen Datei ist der Wert von
self
immer das Hauptobjekt — so als ob der Ruby-Interpreter gerade erst aufgerufen worden wäre. Das bedeutet, dass durch den Aufruf von
load
oder
require
innerhalb einer Methode das Zielobjekt nicht an die geladene Datei übergeben wird.
Die aktuelle Verschachtelung des Moduls wird innerhalb der geladenen Datei ignoriert. Sie können zum Beispiel nicht einfach eine Klasse öffnen und dann eine Datei mit Methodendefinitionen laden. Die Datei wird in einem eigenen Gültigkeitsbereich verarbeitet, nicht innerhalb einer Klasse oder eines Moduls.
    7.6.2.1 Umhülltes Laden
    Die Methode
load
bietet eine selten genutzte Variante, die wir noch nicht beschrieben haben. Wenn sie mit einem zweiten Argument aufgerufen wird, das nicht
nil
oder
false
ist, wird die angegebene Datei »umhüllt« und in ein anonymes Modul geladen. Das bedeutet, dass die geladene Datei den globalen Namensraum nicht beeinflussen kann — alle Konstanten (einschließlich der Klassen und Module), die definiert werden, sind innerhalb des anonymen Moduls gefangen. Sie können das umhüllte Laden für erhöhte Sicherheit nutzen (oder als Möglichkeit, weniger Fehler durch Namensraumkollisionen auszulösen). Führt Ruby Code, dem es nicht vertraut, in einer »Sandbox« aus, so sind darin keine Aufrufe von
require
zugelassen, und
load
darf nur für umhülltes Laden verwendet werden. Mehr dazu in „10.5 Sicherheit“ .
    Wenn eine Datei in ein anonymes Modul geladen wird, kann sie trotzdem globale Variablen setzen, die dann auch von dem ladenden Code gesehen werden. Stellen Sie sich vor, dass Sie eine Datei util.rb schreiben, die ein Modul
Util
mit nützlichen Hilfsfunktionen enthält. Wenn diese Methoden auch dann erreichbar sein sollen, wenn Ihre Datei nur umhüllt geladen wurde, können Sie die folgende Zeile ans Ende der Datei anfügen:
$Util = Util # Speichere eine Referenz auf dieses Modul in einer globalen Variable
    Nun kann der Code, der util.rb in einen anonymen Namensraum lädt, statt über die Konstante
Util
über das globale
$Util
auf die Hilfsfunktionen zugreifen.
    In Ruby 1.8 ist es sogar möglich, das anonyme

Weitere Kostenlose Bücher