Die Programmiersprache Ruby (German Edition)
dass der Text innerhalb der Backticks (oder hinter
%x
) wie ein Literal in doppelten Anführungszeichen verarbeitet wird, so dass beliebige Ruby-Ausdrücke in den String interpoliert werden können. Zum Beispiel
if windows
listcmd = 'dir'
else
listcmd = 'ls'
end
listing = `#{listcmd}`
In einem solchen Fall ist es allerdings einfacher, die Backtick-Methode direkt aufzurufen:
listing = Kernel.`(listcmd)
3.2.1.7 String-Literale und Veränderlichkeit
Strings sind in Ruby veränderlich. Deshalb kann der Ruby-Interpreter nicht dasselbe Objekt verwenden, um zwei identische String-Literale darzustellen. (Wenn Sie Java-Programmierer sind, könnte Sie das überraschen.) Jedes Mal, wenn Ruby auf ein String-Literal trifft, wird ein neues Objekt erzeugt. Wenn Sie ein Literal in den Rumpf einer Schleife einfügen, erzeugt Ruby bei jedem Durchlauf ein neues Objekt. Sie können das wie folgt selbst ausprobieren:
10.times { puts "test".object_id }
Aus Effizienzgründen sollten Sie die Verwendung von Literalen innerhalb von Schleifen unterlassen.
3.2.1.8 Die Methode String.new
Zusätzlich zu all den oben beschriebenen Optionen für String-Literale können Sie neue Strings auch mit der Methode
String.new
erzeugen. Ohne Argumente liefert diese Methode einen neu erzeugten String ohne Zeichen zurück. Mit einem einzelnen String-Argument erzeugt und liefert sie ein neues
String
-Objekt, das denselben Text enthält wie das Argumentobjekt.
3.2.2 Zeichenliterale
Einzelne Zeichen können als Literale in ein Ruby-Programm eingefügt werden, indem Sie dem Zeichen ein Fragezeichen voranstellen. Dazu werden keinerlei Anführungszeichen verwendet:
?A # Zeichenliteral für das ASCII-Zeichen A
?" # Zeichenliteral für das doppelte Anführungszeichen
?? # Zeichenliteral für das Fragezeichen
Obwohl Ruby eine Syntax für Zeichenliterale besitzt, gibt es keine spezielle Klasse zur Darstellung einzelner Zeichen. Außerdem hat sich die Interpretation von Zeichenliteralen zwischen Ruby 1.8 und Ruby 1.9 geändert. In Ruby 1.8 ist der Wert von Zeichenliteralen die Integer-Kodierung des angegebenen Zeichens.
?A
ist beispielsweise dasselbe wie 65, weil die ASCII-Kodierung für das große A der Integer 65 ist. In Ruby 1.8 funktioniert die Zeichenliteralsyntax lediglich mit ASCII- und Ein-Byte-Zeichen.
In Ruby 1.9 und neuer sind Zeichen einfach Strings der Länge 1. Das heißt, das Literal
?A
ist dasselbe wie das Literal
'A'
, und daher gibt es in neuem Code eigentlich keinen Bedarf für diese Zeichenliteralsyntax. In Ruby 1.9 funktioniert die Zeichenliteralsyntax auch mit Mehrbyte-Zeichen und kann sogar mit
\u
-Unicode-Escape-Sequenzen verwendet werden (allerdings nicht mit der Mehrfachschreibweise
\u{a b c}
):
?\u20AC == ?i # => true: nur Ruby 1.9
?i == "\u20AC" # => true
Die Zeichenliteralsyntax kann tatsächlich mit jeder anderen der weiter oben in Tabelle 3.1 aufgelisteten Zeichen-Escape-Sequenzen verwendet werden:
?\t # Zeichenliteral für das Zeichen TAB
?\C-x # Zeichenliteral für Ctrl-X
?\111 # Literal für das Zeichen mit der Kodierung 0111 (oktal)
3.2.3 String-Operatoren
Die Klasse
String
definiert diverse nützliche Operatoren zur Manipulation von Text-Strings. Der Operator
+
verknüpft zwei Strings und liefert das Ergebnis als neues String-Objekt zurück:
planet = "Erde"
"Hallo" + " " + planet # Erzeugt "Hallo Erde"
Java-Programmierer sollten beachten, dass der Operator
+
den rechten Operanden nicht in einen String konvertiert; das müssen Sie selbst tun:
"Hallo Planet #" + planet_number.to_s # to_s konvertiert in einen String
Natürlich ist die String-Interpolation in Ruby normalerweise einfacher als die String-Verknüpfung mit
+
. Bei der String-Interpolation erfolgt der Aufruf von
to_s
automatisch:
"Hallo Planet ##{planet_number}"
Der Operator
<<
fügt seinen zweiten Operanden an den ersten an und sollte C++-Programmierern bekannt vorkommen. Dieser Operator unterscheidet sich stark von +; er modifiziert den linken Operanden, anstatt ein neues Objekt zu erzeugen und zurückzugeben:
greeting = "Hallo"
greeting << " " << "Welt"
puts greeting # Gibt "Hallo Welt" aus
Genau wie + führt auch der Operator
<<
keine Typkonvertierung des rechten Operanden durch. Wenn der rechte Operand allerdings ein Integer ist, wird er als Zeichencode interpretiert, und das entsprechende Zeichen wird angehängt. In Ruby 1.8 sind nur Integer zwischen 0 und 255 erlaubt. In Ruby 1.9 kann jeder Integer verwendet werden, der einen gültigen Codepunkt in der
Weitere Kostenlose Bücher