Sto facendo fatica a capire come funziona la sintassi delle stringhe in Rust. In particolare, sto cercando di capire come creare una stringa a più righe.
Sto facendo fatica a capire come funziona la sintassi delle stringhe in Rust. In particolare, sto cercando di capire come creare una stringa a più righe.
Risposte:
Tutti i letterali stringa possono essere suddivisi su più righe; per esempio:
let string = "line one
line two";
è una stringa di due righe, la stessa di "line one\nline two"
(ovviamente si può usare \n
direttamente anche la escape newline). Se desideri semplicemente spezzare una stringa su più righe per motivi di formattazione, puoi sfuggire alla nuova riga e allo spazio bianco iniziale con un \
; per esempio:
let string = "one line \
written over \
several";
è lo stesso di "one line written over several"
.
Se vuoi delle interruzioni di riga nella stringa, puoi aggiungerle prima di \
:
let string = "multiple\n\
lines\n\
with\n\
indentation";
È lo stesso di "multiple\nlines\nwith\nindentation";
concat!()
macro per completare le opzioni fornite ( doc.rust-lang.org/std/macro.concat.html )
Se vuoi fare qualcosa di più lungo, che può includere o meno virgolette, barre rovesciate, ecc., Usa la notazione letterale stringa grezza :
let shader = r#"
#version 330
in vec4 v_color;
out vec4 color;
void main() {
color = v_color;
};
"#;
Se nella sequenza sono presenti sequenze di virgolette doppie e simboli di hash, è possibile indicare un numero arbitrario di hash come delimitatore:
let crazy_raw_string = r###"
My fingers #"
can#"#t stop "#"" hitting
hash##"#
"###;
La risposta di Huon è corretta, ma se il rientro ti disturba, considera l'utilizzo di Indoc, che è una macro procedurale per le stringhe multilinea rientrate. Sta per "documento rientrato". Fornisce una macro chiamata indoc!()
che prende letteralmente una stringa multilinea e non lo rientra, quindi il carattere non spaziale più a sinistra si trova nella prima colonna.
let s = indoc! {"
line one
line two
"};
Il risultato è "line one\nline two\n"
.
Lo spazio bianco viene conservato rispetto al carattere non spaziale più a sinistra nel documento, quindi i seguenti spazi della riga due rientrano 3 rispetto alla riga uno:
let s = indoc! {"
line one
line two
"};
Il risultato è "line one\n line two\n"
.
Nel caso in cui desideri rientrare il testo in più righe nel tuo codice:
let s = "first line\n\
second line\n\
third line";
println!("Multiline text goes next:\n{}", s);
Il risultato sarà il seguente:
Multiline text goes next:
first line
second line
third line
\n
fuga di newline [...] è possibile sfuggire alla newline e condurre lo spazio bianco con a{backslash}
. (sembra molto difficile digitare una barra rovesciata nel codice in un commento, a quanto pare.)