2015-09-14 2 views
9

Ich habe gerade begonnen, Rust zu lernen, und ich mache ein paar kleine Werkzeuge, um mir zu helfen, die Sprache zu verstehen. Ich habe ein Problem beim Formatieren eines String mit dem format! Makro. Da format! ein Literal akzeptiert, kann ich meine Zeichenfolge nicht übergeben. Ich möchte dies tun, um dynamisch Strings in die aktuelle Zeichenfolge zur Verwendung in einer View-Engine einzufügen. Ich bin offen für Vorschläge, wenn es einen besseren Weg gibt, es zu tun.Wie kann ich eine dynamische Formatzeichenfolge mit dem Format verwenden? Makro?

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

Was ich will, tatsächlich erreichen, ist das folgende Beispiel, wo main.html {content} enthält.

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(()) 
} 

Also ich möchte den Inhalt von main.html drucken, nachdem ich es formatiert habe.

+0

Wahrscheinlich ein Duplikat von http://stackoverflow.com/questions/28333612/how-can-i-append-a-formatted-string-to-an-existing-string – Shepmaster

+1

@Shempmaster: kein Duplikat; Es ist umgekehrt: Die Formatzeichenfolge ist das dynamische Bit in dieser Frage. –

Antwort

5

Kurze Antwort: Es kann nicht getan werden.


Lange Antwort: die format! Makro (und seine Derivaten) erfordern ein Zeichenfolgenliteral, dass ein String bei der Kompilierung-Zeit bekannt ist. Wenn die angegebenen Argumente nicht mit dem Format übereinstimmen, wird für diese Anforderung ein Kompilierungsfehler ausgelöst.


Was Sie suchen, ist als Vorlage-Engine bekannt. Eine nicht erschöpfende Liste von Rust Template-Engines in keiner bestimmten Reihenfolge:

Template-Engines haben unterschiedliche Eigenschaften und unterscheiden sich vor allem durch den Grad der Validierung zur Kompilier- oder Laufzeit und ihre Flexibilität (ich erinnere mich, dass Maud zum Beispiel sehr HTML-zentriert war). Es liegt an Ihnen, diejenige zu finden, die am besten zu Ihrem Anwendungsfall passt.

+0

Vielen Dank für Ihre Antwort. Ich denke, ich werde stattdessen ersetzen, obwohl ich das mache, um Rost zu lernen, und nicht für etwas Bestimmtes. – Sune

1

Überprüfen Sie die strfmt Bibliothek, es ist die nächste, die ich gefunden habe, um dynamische String-Formatierung zu tun.

Verwandte Themen