2015-09-14 24 views
9

Ho appena iniziato a studiare Rust e sto facendo alcuni piccoli strumenti per aiutarmi a capire la lingua. Ho un problema con la formattazione di String utilizzando la macro format!. Come format! prende un letterale, non sono in grado di passare la mia stringa ad esso. Voglio fare questo per aggiungere dinamicamente stringhe nella stringa corrente da usare in un motore di visualizzazione. Sono aperto a suggerimenti se ci potrebbe essere un modo migliore per farlo.Come posso usare una stringa di formato dinamico con il formato! macro?

let test = String::from("Test: {}"); 
    let test2 = String::from("Not working!"); 
    println!(test, test2); 

Quello che in realtà voglio ottenere è l'esempio di seguito, dove main.html contiene {content}.

use std::io::prelude::*; 
use std::fs::File; 
use std::io; 

fn main() { 
    let mut buffer = String::new(); 
    read_from_file_using_try(&mut buffer); 

    println!(&buffer, content="content"); 
} 

fn read_from_file_using_try(buffer: &mut String) -> Result<(), io::Error> { 
    let mut file = try!(File::open("main.html")); 
    try!(file.read_to_string(buffer)); 
    Ok(()) 
} 

Quindi voglio stampare il contenuto di main.html dopo averlo formattato.

+0

Probabilmente un duplicato di http://stackoverflow.com/questions/28333612/how-can-i-append-a-formatted-string-to-an-existing-string – Shepmaster

+1

@Shepmaster: non un duplicato; è il contrario: la stringa di formato è il bit dinamico in questa domanda. –

risposta

5

Risposta breve: non è possibile.


Risposta lunga: il format! macro (e suoi derivati) richiede una stringa letterale, che è una stringa nota alla compilation-tempo. In cambio di questo requisito, se gli argomenti forniti non corrispondono al formato, viene generato un errore di compilazione.


Quello che stai cercando è noto come motore di template. Un elenco non esaustivo dei motori di modello Rust in nessun ordine particolare:

I modelli di motori hanno caratteristiche diverse, e in particolare differiscono per il grado di convalida che si verifica in fase di compilazione o di esecuzione e la loro flessibilità (mi sembra di ricordare che Maud fosse molto HTML-centrico, ad esempio). Sta a te trovare quello più adatto al tuo caso d'uso.

+0

Grazie per la risposta. Penso che andrò con la sostituzione, invece, mentre sto facendo questo per imparare la ruggine e non per qualcosa di specifico. – Sune

1

Controlla la libreria strfmt, è il più vicino che ho trovato per eseguire la formattazione dinamica delle stringhe.