Die Programmiersprache Ruby (German Edition)
erlaubt:
money = "\u{20AC A3 A5}" # => "i£¥"
Beachten Sie, dass Leerzeichen innerhalb der geschweiften Klammern keine Leerzeichen im String selbst kodieren. Sie können jedoch das ASCII-Leerzeichen mit dem Unicode-Codepunkt 20 kodieren:
money = "\u{20 AC 20 A3 20 A5}" # => "i £ ¥"
Strings, die
\u
-Escapes verwenden, werden mithilfe der Unicode-Kodierung UTF-8 kodiert. (Siehe „3.2.6 String-Kodierungen und Multibyte-Zeichen“ für weitere Informationen über die Kodierung von Strings.)
\u
-Escapes sind in Strings normalerweise, aber nicht immer, erlaubt. Wenn die Quelldatei eine andere Kodierung als UTF-8 verwendet und ein String Mehrbyte-Zeichen in dieser Kodierung enthält (literale Zeichen, keine durch Escapes erzeugten Zeichen), dann ist der Einsatz von
\u
in diesem String nicht erlaubt – es ist einfach nicht möglich, dass ein und derselbe String Zeichen in zwei verschiedenen Kodierungen enthält. Sie können
\u
immer verwenden, wenn die Quellkodierung (siehe „2.4.1 Die Programmkodierung festlegen“ ) UTF-8 ist. Außerdem können Sie
\u
in jedem String verwenden, der nur ASCII-Zeichen enthält.
\u
-Escapes können in Strings mit doppelten Anführungszeichen sowie in anderen (weiter unten beschriebenen) Formen von Strings vorkommen, etwa in regulären Ausdrücken, Zeichenliteralen,
%
- und
%Q
-begrenzten Strings,
%W
-begrenzten Strings, Hier-Dokumenten und Befehls-Strings in Backticks. Java-Programmierer sollten beachten, dass Rubys
\u
-Escapes nur in String-Literalen stehen dürfen, nicht in Programmbezeichnern.
3.2.1.4 Weitere Begrenzungen für String-Literale
Wenn Sie mit Text arbeiten, der Apostrophe und Anführungszeichen enthält, ist es lästig, ihn in Form von String-Literalen in einfachen oder doppelten Anführungszeichen zu verwenden. Ruby unterstützt eine verallgemeinerte Klammerungssyntax für String-Literale (und, wie wir später sehen werden, auch für reguläre Ausdrücke und Array-Literale). Die Sequenz
%q
beginnt ein String-Literal, das den Regeln für Strings in einfachen Anführungszeichen folgt, während die Sequenz
%Q
(oder einfach
%
) ein Literal startet, das den Regeln für Strings in doppelten Anführungszeichen gehorcht. Das erste Zeichen hinter dem
q
oder
Q
ist das Begrenzungszeichen, und das String-Literal geht weiter, bis ein passendes (nicht escapetes) Begrenzungszeichen gefunden wird. Wenn das öffnende Begrenzungszeichen
(
,
[
,
{
oder
<
ist, dann ist das schließende
)
,
]
,
}
beziehungsweise
>
. (Beachten Sie, dass Backtick
`
und Apostroph
'
kein Paar bilden.) In allen anderen Fällen entspricht das schließende Begrenzungszeichen dem öffnenden. Hier einige Beispiele:
%q(Mach's dir leicht mit '-Zeichen!)
%Q|"Wie geht's dir?", fragte er.|
%-Dieses String-Literal endet mit Zeilenumbruch.\n- # Q hier weggelassen
Wenn Sie Bedarf haben, das Begrenzungszeichen zu escapen, können Sie einen Backslash verwenden (sogar in der strengeren
%q
-Form) oder einfach ein anderes Begrenzungszeichen wählen:
%q_Dieses String-Literal enthält \_Unterstriche\__
%Q!Verwenden Sie einfach ein anderes_ Begrenzungszeichen\!!
Wenn Sie Begrenzungszeichen paarweise verwenden, brauchen Sie diese in Ihren Literalen nicht zu escapen, solange sie in korrekt verschachtelten Paaren auftreten:
# XML verwendet Paare spitzer Klammern:
%<Ruby in a Nutshell> # Das funktioniert
# Ausdrücke verwenden verschachtelte Klammerpaare:
%((1+(2*3)) = #{(1+(2*3))}) # Das geht auch
%(Eine einzelne Klammer \(muss escapet werden) # Escape-Bedarf besteht
3.2.1.5 Hier-Dokumente
Für lange String-Literale gibt es möglicherweise kein einzelnes Begrenzungszeichen, das Sie verwenden können, ohne sich Sorgen darüber zu machen, das Escapen dieses Zeichens innerhalb des Literals zu vergessen. Rubys Lösung für dieses Problem besteht darin, Ihnen die Festlegung einer beliebigen Sequenz von Zeichen zu ermöglichen, die als Begrenzung des Strings dient. Diese Art Literal wurde aus der Unix-Shell-Syntax übernommen und trägt den historischen Namen Hier-Dokument (weil das Dokument gleich hier im Quellcode statt in einer externen Datei ist.)
Hier-Dokumente beginnen mit
<<
oder
<<-
. Darauf folgt unmittelbar (ein Leerzeichen ist nicht erlaubt, um Verwechslungen mit dem Linksverschiebungsoperator zu verhindern) ein Bezeichner oder String, der die Abschlussbegrenzung festlegt. Der Text des String-Literals beginnt in der nächsten Zeile und geht weiter, bis der Begrenzungstext in einer Zeile für
Weitere Kostenlose Bücher