2013-03-07 25 views

risposta

30

Se sto leggendo il language reference correttamente, allora sembra proprio che dovrebbe funzionare. Il linguaggio ref dice che sono supportati \n (come escape comuni, per inserire interruzioni di riga nella stringa), insieme a "ulteriori escape" inclusi LF, CR e HT.

+8

Lee è corretto. La barra rovesciata può essere utilizzata per estendere una costante di stringa su più righe. Gli spazi bianchi iniziali vengono omessi dalla seconda riga. –

+0

Grazie - il mio codice originale ha avuto un errore diverso che mi ha portato a credere che "\" non avrebbe funzionato. – sdasdadas

29

Un altro modo per farlo è quello di utilizzare un raw string literal:

stringhe letterali Raw non effettua il trattamento fughe. Iniziano con il carattere U+0072 (r), seguito da zero o più del carattere U+0023 (#) e un carattere U+0022 (a virgolette doppie). Il corpo stringa prima può contenere qualsiasi sequenza di caratteri Unicode ed è terminato solo da un'altra U+0022 (doppio apice), seguita dalla stessa numero di U+0023 caratteri (#) che hanno preceduto l'apertura U+0022 (doppio apice) carattere.

Tutti i caratteri Unicode contenuti nel corpo stringa greggio rappresentano stessi, i caratteri U+0022 (virgolette doppie) (eccetto quando seguito da almeno tanti U+0023 (#) caratteri come sono stati utilizzati per avviare il stringa grezzo letterale) o U+005C (\) non hanno alcun significato speciale.

Esempi di stringhe letterali:

"foo"; r"foo";      // foo 
"\"foo\""; r#""foo""#;    // "foo" 

"foo #\"# bar"; 
r##"foo #"# bar"##;    // foo #"# bar 

"\x52"; "R"; r"R";     // R 
"\\x52"; r"\x52";     // \x52 
+5

Giusto, ma non necessario. Ogni stringa letterale in Rust può essere multilinea. – DenisKolodin

0

Ci sono due modi di scrivere stringhe multilinea a Rust che hanno differenti risultati. Dovresti scegliere con cura tra di loro a seconda di cosa stai cercando di realizzare.

Metodo 1: ciondolanti spazi

Se una stringa che inizia con " contiene un'interruzione linea letterale, il compilatore ruggine sarà "ingoiare" tutti gli spazi vuoti tra l'ultimo carattere non di spaziatura della linea e la prima carattere non di spaziatura della riga successiva e sostituirli con un singolo .

Esempio:

fn test() { 
    println!("{}", "hello 
    world"); 
} 

Non importa quante letterali (spazio vuoto) caratteri (zero o un centinaio) compaiono dopo hello, l'uscita di quanto sopra sarà sempre hello world.

Metodo 2: rovesciare linea di rottura

Questo è l'esatto opposto. In questa modalità, tutti gli spazi bianchi prima di un letterale \ sulla prima riga vengono mantenuti e anche tutti gli spazi bianchi successivi sulla riga successiva vengono salvati.

Esempio:

fn test() { 
    println!("{}", "hello \ 
    world"); 
} 

In questo esempio, l'uscita è hello world.

Inoltre, come accennato in un'altra risposta, Rust ha stringhe "letterali", ma non entrano in questa discussione come in Rust (a differenza di altri linguaggi che devono ricorrere a stringhe non elaborate per questo) supporta interruzioni letterali di riga nel contenuto citato senza restrizioni, come possiamo vedere sopra.

Problemi correlati