J'ai du mal à comprendre comment fonctionne la syntaxe de chaîne dans Rust. Plus précisément, j'essaie de comprendre comment créer une chaîne de plusieurs lignes.
J'ai du mal à comprendre comment fonctionne la syntaxe de chaîne dans Rust. Plus précisément, j'essaie de comprendre comment créer une chaîne de plusieurs lignes.
Réponses:
Tous les littéraux de chaîne peuvent être séparés sur plusieurs lignes; par exemple:
let string = "line one
line two";
est une chaîne de deux lignes, identique à "line one\nline two"
(bien sûr, on peut aussi utiliser l' \n
échappement de nouvelle ligne directement). Si vous souhaitez simplement couper une chaîne sur plusieurs lignes pour des raisons de formatage, vous pouvez échapper à la nouvelle ligne et à l'espace blanc de début avec un \
; par exemple:
let string = "one line \
written over \
several";
est le même que "one line written over several"
.
Si vous voulez des sauts de ligne dans la chaîne, vous pouvez les ajouter avant le \
:
let string = "multiple\n\
lines\n\
with\n\
indentation";
C'est la même chose que "multiple\nlines\nwith\nindentation";
concat!()
macro pour compléter les options données ( doc.rust-lang.org/std/macro.concat.html )
Si vous souhaitez faire quelque chose d'un peu plus long, qui peut ou non inclure des guillemets, des barres obliques inverses, etc., utilisez la notation littérale de chaîne brute :
let shader = r#"
#version 330
in vec4 v_color;
out vec4 color;
void main() {
color = v_color;
};
"#;
Si vous avez des séquences de guillemets doubles et de symboles de hachage dans votre chaîne, vous pouvez désigner un nombre arbitraire de hachages comme délimiteur:
let crazy_raw_string = r###"
My fingers #"
can#"#t stop "#"" hitting
hash##"#
"###;
La réponse de Huon est correcte mais si l'indentation vous dérange, envisagez d'utiliser Indoc qui est une macro procédurale pour les chaînes multilignes indentées. Il signifie «document en retrait». Il fournit une macro appelée indoc!()
qui prend un littéral de chaîne multiligne et l'annule pour que le caractère non espace le plus à gauche se trouve dans la première colonne.
let s = indoc! {"
line one
line two
"};
Le résultat est "line one\nline two\n"
.
L'espace blanc est conservé par rapport au caractère non espace le plus à gauche dans le document, de sorte que ce qui suit a la ligne deux en retrait de 3 espaces par rapport à la première ligne:
let s = indoc! {"
line one
line two
"};
Le résultat est "line one\n line two\n"
.
Si vous souhaitez mettre en retrait du texte multiligne dans votre code:
let s = "first line\n\
second line\n\
third line";
println!("Multiline text goes next:\n{}", s);
Le résultat sera le suivant:
Multiline text goes next:
first line
second line
third line
\n
échappement de nouvelle ligne, [...] vous pouvez échapper à la nouvelle ligne et à l'espace blanc de début avec un{backslash}
. (il est très difficile de taper une barre oblique inverse dans le code dans un commentaire, il semble.)