2015-10-25 14 views
5

In alcune lingue è possibile scrivere qualcosa di questo genere:multilinea di Rust con uno spazio di primo piano conservato

val some_string = 
    """First line. 
    | Second line, with leading space.""" 

Cioè, una stringa multi-linea in cui tutto lo spazio che porta viene rimosso fino ad un punto, ma non oltre. Questo può essere imitato in Rust scrivendo:

let some_string = 
    "First line.\n \ 
    Second line, with leading space."; 

Tuttavia, questo perde il beneficio di guardare più vicino alla produzione effettiva. C'è un modo in Rust di scrivere qualcosa come lo pseudocodice di esempio, preservando (alcuni) degli spazi bianchi?

risposta

4

No non è possibile (v1.3 e probabilmente per molto tempo).

Tuttavia, solitamente i valori letterali di stringa su più righe che devono essere leggibili dall'uomo sono una sorta di descrizioni costanti, come la stringa di utilizzo per un programma CLI. Spesso vedi quelle cose rientrate in questo modo:

const USAGE: &'static str = " 
Naval Fate. 

Usage: 
    ... 
"; 

Quale è giusto immagino. Se hai molte di quelle stringhe o una molto grande, puoi usare include_str!.

3

Non è supportato dalla lingua di Rust 1.7 ma Indoc è una macro procedurale che fa ciò che si desidera. Sta per "documento rientrato". Fornisce una macro denominata indoc!() che accetta una stringa multilinea letterale e la disattiva in modo che il carattere non spaziale più a sinistra si trovi nella prima colonna.

let some_string = indoc!(" 
    First line. 
    Second line, with leading space."); 

Funziona anche per valori di stringa non formattati.

let some_string = indoc!(r#" 
    First line. 
    Second line, with leading space."#); 

Il risultato in entrambi i casi è "First line\n Second line, with leading space."

+0

E 'previsto su Stack Overflow che si dichiara affiliazione quando si stanno promuovendo uno strumento o una libreria che si è creato. – Shepmaster