Es fällt mir schwer herauszufinden, wie die String-Syntax in Rust funktioniert. Insbesondere versuche ich herauszufinden, wie eine mehrzeilige Zeichenfolge erstellt wird.
Es fällt mir schwer herauszufinden, wie die String-Syntax in Rust funktioniert. Insbesondere versuche ich herauszufinden, wie eine mehrzeilige Zeichenfolge erstellt wird.
Antworten:
Alle Zeichenfolgenliterale können in mehrere Zeilen unterteilt werden. beispielsweise:
let string = "line one
line two";
ist eine zweizeilige Zeichenfolge, die gleiche wie "line one\nline two"
(natürlich kann man den \n
Zeilenumbruch auch direkt verwenden). Wenn Sie aus Formatierungsgründen nur eine Zeichenfolge über mehrere Zeilen hinweg unterbrechen möchten, können Sie die neue Zeile und das führende Leerzeichen mit einem \
; beispielsweise:
let string = "one line \
written over \
several";
ist das gleiche wie "one line written over several"
.
Wenn Sie Zeilenumbrüche in der Zeichenfolge wünschen, können Sie diese vor dem \
:
let string = "multiple\n\
lines\n\
with\n\
indentation";
Es ist das gleiche wie "multiple\nlines\nwith\nindentation";
concat!()
Makro hinzufügen , um die angegebenen Optionen zu vervollständigen ( doc.rust-lang.org/std/macro.concat.html )
Wenn Sie etwas länger arbeiten möchten, einschließlich Anführungszeichen, Backslashes usw., verwenden Sie die Literalnotation für rohe Zeichenfolgen :
let shader = r#"
#version 330
in vec4 v_color;
out vec4 color;
void main() {
color = v_color;
};
"#;
Wenn Ihre Zeichenfolge Folgen von doppelten Anführungszeichen und Hash-Symbolen enthält, können Sie eine beliebige Anzahl von Hashes als Trennzeichen angeben:
let crazy_raw_string = r###"
My fingers #"
can#"#t stop "#"" hitting
hash##"#
"###;
Huons Antwort ist richtig, aber wenn Sie der Einzug stört, sollten Sie Indoc verwenden , ein prozedurales Makro für eingerückte mehrzeilige Zeichenfolgen. Es steht für "eingerücktes Dokument". Es wird ein Makro namens aufgerufen indoc!()
, das ein mehrzeiliges Zeichenfolgenliteral verwendet und die Einrückung aufhebt, sodass sich das Zeichen ganz links, das kein Leerzeichen ist, in der ersten Spalte befindet.
let s = indoc!("
line one
line two");
Das Ergebnis ist "line one\nline two"
.
Es gibt einige gleichwertige Möglichkeiten, dasselbe zu formatieren, wenn Sie dies bevorzugen. Wählen Sie also eine aus, die Ihnen gefällt. Die folgenden beiden führen zu derselben Zeichenfolge wie oben. Der Inhalt kann beliebig eingerückt werden - es muss keine bestimmte Anzahl von Leerzeichen sein.
let s = indoc!(
"line one
line two");
let s = indoc!("line one
line two");
Das Leerzeichen bleibt relativ zum am weitesten links stehenden Nicht-Leerzeichen im Dokument erhalten, sodass in Zeile 2 drei Leerzeichen relativ zu Zeile 1 eingerückt sind:
let s = indoc!("
line one
line two");
Das Ergebnis ist "line one\n line two"
.
Falls Sie mehrzeiligen Text in Ihren Code einrücken möchten:
let s = "first line\n\
second line\n\
third line";
println!("Multiline text goes next:\n{}", s);
Das Ergebnis ist folgendes:
Multiline text goes next:
first line
second line
third line
\n
Zeilenumbruch verwenden, [...] man kann den Zeilenumbruch und das führende Leerzeichen mit einem{backslash}
. (Es ist sehr schwer, einen Backslash in Code in einen Kommentar