Die Programmiersprache Ruby (German Edition)
String-Literale; der Ruby-Interpreter wird sie während des Parsing-Prozesses wieder zusammenfügen. Denken Sie jedoch daran, dass Sie die Zeilenumbrüche (siehe Kapitel 2 ) zwischen den Literalen escapen müssen, damit Ruby den Zeilenumbruch nicht als Anweisungsabschluss interpretiert:
message =
'Diese drei Literale werden '\
'vom Interpreter zu einem verbunden. '\
'Der Ergebnis-String enthält keine Zeilenumbrüche.'
3.2.1.2 String-Literale in doppelten Anführungszeichen
Durch doppelte Anführungszeichen begrenzte String-Literale sind erheblich flexibler als Literale in einfachen Anführungszeichen. Literale in doppelten Anführungszeichen unterstützen eine Reihe von Backslash-Escape-Sequenzen, etwa
\n
für den Zeilenumbruch,
\t
für den Tabulator oder
\"
für ein Anführungszeichen, das den String nicht abschließt:
"\t\"Dieser Satz beginnt mit Tab und endet mit Zeilenumbruch\"\n"
"\\" # Ein einzelner Backslash
In Ruby 1.9 bettet die Escape-Sequenz
\u
beliebige Unicode-Zeichen, angegeben durch ihren Codepunkt, in einen String in doppelten Anführungszeichen ein. Diese Escape-Sequenz ist so komplex, dass sie in ihrem eigenen Abschnitt beschrieben wird (siehe „3.2.1.3 Unicode-Escapes“ ). Viele der anderen Backslash-Escape-Sequenzen kommen nur gelegentlich vor und werden verwendet, um Binärdaten in Strings zu kodieren. Die vollständige Liste der Escape-Sequenzen wird in Tabelle 3.1 gezeigt.
Noch mächtiger sind String-Literale in doppelten Anführungszeichen dadurch, dass sie beliebige Ruby-Ausdrücke enthalten können. Wenn der String erzeugt wird, wird der Ausdruck ausgewertet, in einen String konvertiert und anstelle des Ausdruckstextes selbst in den String eingefügt. Diese Ersetzung eines Ausdrucks durch seinen Wert wird in Ruby als »String-Interpolation« bezeichnet. Ausdrücke innerhalb von Strings in doppelten Anführungszeichen beginnen mit dem Zeichen
#
und werden von geschweiften Klammern umschlossen:
"360 Grad=#{2*Math::PI} Bogenmaß" # "360 Grad=6.28318530717959 Bogenmaß"
Wenn der Ausdruck, der im String-Literal ausgewertet werden soll, einfach eine Referenz auf eine globale, Instanz- oder Klassenvariable ist, können die geschweiften Klammern weggelassen werden:
$salutation = 'hallo' # Eine globale Variable definieren
"#$salutation Welt" # und in einem String mit doppelten
# Anführungszeichen verwenden
Verwenden Sie einen Backslash, um das Zeichen
#
zu escapen, wenn es nicht besonders behandelt werden soll. Beachten Sie, dass das nur zu geschehen braucht, wenn hinter
#
eines der Zeichen
{
,
$
oder
@
steht: [ 7 ]
"My phone #: 555-1234" # Kein Escape-Bedarf
"Verwenden Sie \#{ zur Interpolation" # Escapen Sie #{ mit Backslash
----
String-Interpolation mit sprintf
C-Programmierer freuen sich sicher, zu erfahren, dass auch Ruby die Funktionen
printf
und
sprintf
1 zur Interpolation formatierter Werte in Strings unterstützt:
sprintf("Pi ist etwa %.4f", Math::PI) # Liefert "Pi ist etwa 3.1416"
Der Vorteil dieses Interpolationsstils besteht darin, dass der Format-String Optionen festlegen kann, etwa die Anzahl der Dezimalstellen, die in einem
Float
dargestellt werden. In echtem Ruby-Stil gibt es sogar eine Operator-Schreibweise der Methode
sprintf
: Verwenden Sie einfach einen
%
-Operator zwischen einem Format-String und den Argumenten, die in diesen interpoliert werden sollen:
"Pi ist etwa %.4f" % Math::PI # Wie das Beispiel oben
"%s: %f" % ["Pi", Math::PI] # Array rechts für mehrere Argumente
----
String-Literale können mehrere Zeilen umfassen, und Zeilenabschlüsse werden Teil des String-Literals, sofern sie nicht mit einem Backslash escapet werden:
"Dieses String-Literal
besteht aus zwei Zeilen, \
wurde aber in dreien geschrieben"
Möglicherweise möchten Sie die Zeilenumbrüche in Ihren Strings explizit kodieren – um CRLF-Netzwerk-Zeilenabschlüsse (Carriage Return Line Feed, das heißt Wagenrücklauf und Zeilenvorschub) zu erzwingen, wie sie beispielsweise im HTTP-Protokoll verwendet werden. Schreiben Sie dazu alle Ihre String-Literale in eine einzelne Zeile und fügen Sie die Zeilenenden explizit mithilfe der Escape-Sequenzen
\r
und
\n
ein. Denken Sie daran, dass aufeinanderfolgende String-Literale automatisch verknüpft werden, aber der Zeilenumbruch zwischen ihnen escapet werden muss, wenn sie in seperate Zeilen geschrieben werden:
"Dieser String hat drei Zeilen.\r\n" \
"Er wird in Form dreier aufeinanderfolgender Literale geschrieben,\r\n" \
"die durch Zeilenumbrüche
Weitere Kostenlose Bücher