Die Programmiersprache Ruby (German Edition)
sich auftaucht. Zum Beispiel
document = <Dies ist ein String-Literal.
Es hat zwei Zeilen und endet abrupt ...
HERE
Der Ruby-Interpreter erhält den Inhalt eines String-Literals, indem er eine Zeile nach der anderen aus der Eingabe liest. Das bedeutet jedoch nicht, dass
<<
das letzte Element in seiner eigenen Zeile sein muss. Denn nachdem er den Inhalt eines Hier-Dokuments gelesen hat, kehrt der Ruby-Interpreter zu der Zeile zurück, in der er gerade war, und parst diese weiter. Der folgende Ruby-Code erzeugt beispielsweise einen String, indem er zwei Hier-Dokumente und einen normalen String in Anführungszeichen verknüpft:
greeting = <Hallo
HERE
liebe
THERE
Das
<in Zeile 1 sorgt dafür, dass der Interpreter Zeile 2 und 3 liest. Und das
<führt dazu, dass er Zeile 4 und 5 liest. Nach dem Lesen dieser Zeilen sind die drei String-Literale zu einem verknüpft.
Die abschließende Begrenzung eines Hier-Dokuments muss tatsächlich für sich allein in einer Zeile stehen: Dahinter darf kein Kommentar stehen. Wenn das Hier-Dokument mit
<<
anfängt, muss die Begrenzung am Anfang der Zeile beginnen. Beginnt das Literal dagegen mit
<<-
, darf Whitespace vor der Begrenzung stehen. Der Zeilenumbruch am Anfang eines Hier-Dokuments ist kein Teil des Literals, der Zeilenumbruch an seinem Ende dagegen schon. Deshalb endet jedes Hier-Dokument mit einem Zeilenumbruch, außer ein leeres Hier-Dokument, das
""
entspricht:
empty = <END
Wenn Sie einen Bezeichner ohne Anführungszeichen als Begrenzung verwenden, wie in den obigen Beispielen, dann verhält sich das Hier-Dokument wie ein String in doppelten Anführungszeichen, was die Interpretation von Backslash-Escapes und dem Zeichen
#
angeht. Wenn Sie etwas sehr, sehr wörtlich meinen, also keinerlei Escape-Zeichen erlauben möchten, stellen Sie die Begrenzung in einfache Anführungszeichen. Das ermöglicht Ihnen außerdem die Verwendung von Leerzeichen innerhalb Ihrer Begrenzung:
document = <<'THIS IS THE END, MY ONLY FRIEND, THE END'
.
. Hier kommen Unmengen von Text hin,
. völlig ohne Begrenzung.
.
THIS IS THE END, MY ONLY FRIEND, THE END
Die einzelnen Anführungszeichen um die Begrenzung weisen darauf hin, dass dieses String-Literal sich wie ein String in einfachen Anführungszeichen verhält. Diese Art Hier-Dokument ist sogar noch strenger. Da das einzelne Anführungszeichen keine Begrenzung ist, besteht nie der Bedarf, ein einzelnes Anführungszeichen durch einen Backslash zu escapen. Und da der Backslash so nie als Escape-Zeichen benötigt wird, braucht auch der Backslash niemals escapet zu werden. In dieser Art von Hier-Dokument sind Backslashes daher einfach Teil des String-Literals.
Sie können auch ein String-Literal in doppelten Anführungszeichen als Begrenzung eines Hier-Dokuments verwenden. Dies entspricht der Verwendung eines einfachen Bezeichners, abgesehen davon, dass es Leerzeichen innerhalb der Begrenzung ermöglicht:
document = <<-"# # #" # Dies ist die einzige Stelle für einen Kommentar
#{title}
#{title}
#{body}
# # #
Beachten Sie, dass es keine Möglichkeit gibt, einen Kommentar in ein Hier-Dokument einzufügen, außer in der ersten Zeile nach dem Token
<<
, vor dem Beginn des Literals. Von all den
#
-Zeichen in diesem Code leitet eins einen Kommentar ein, drei interpolieren Ausdrücke innerhalb des Literals und die restlichen bilden die Begrenzung.
3.2.1.6 Backtick-Kommandoausführung
Ruby unterstützt noch eine weitere Syntax, die mit Anführungszeichen und Strings zu tun hat. Wird Text in Backticks (das Zeichen
`
) eingeschlossen, dann wird dieser Text wie ein String-Literal in doppelten Anführungszeichen behandelt. Der Wert dieses Literals wird an die Methode mit dem speziellen Namen
Kernel.`
übergeben. Diese Methode führt den Text als Shell-Befehl des Betriebssystems aus und gibt die Ausgabe des Befehls als String zurück.
Betrachten Sie folgenden Ruby-Code:
`ls`
Auf einen Unix-System liefern diese vier Zeichen einen String, der die Namen der Dateien im aktuellen Verzeichnis auflistet. Das ist natürlich plattformabhängig. Eine ungefähre Entsprechung in Windows wäre
`dir`
.
Ruby unterstützt eine verallgemeinerte Syntax, die Sie anstelle von Backticks verwenden können. Sie entspricht der weiter oben vorgestellten
%Q
-Syntax, verwendet aber stattdessen
%x
(für execute).
%x[ls]
Beachten Sie,
Weitere Kostenlose Bücher