2015-09-14 32 views
9

我剛開始學習Rust,我正在製作一些小工具來幫助我理解語言。我有一個使用format!宏格式化String的問題。由於format!需要一個文字,我不能將我的字符串傳遞給它。我想這樣做動態地將字符串添加到當前字符串中以便在視圖引擎中使用。如果可能有更好的方法來解決問題,我很樂意提供建議。如何使用格式的動態格式字符串!宏?

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

我實際上想要達到的是以下示例,其中main.html包含{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(()) 
} 

所以我想打印main.html的內容格式化後。

+0

可能是重複的http://stackoverflow.com/questions/28333612/how-can-i-append-a-formatted-string-to-an-existing-string – Shepmaster

+1

@Shepmaster:不是重複的;這是另一回合:格式字符串是這個問題中的動態位。 –

回答

5

簡答:不能這樣做。


朗答案:format!宏(及其衍生物)需要一個字符串,也就是在編譯時已知的字符串。爲了交換此要求,如果提供的參數與格式不匹配,則會引發編譯錯誤。


你在找什麼叫做模板引擎。沒有特定的順序鏽模板引擎的非詳盡列表:

模板引擎具有不同的特性,並且在編譯時或運行時出現的驗證程度和它們的靈活性顯着不同(例如,我似乎記得Maud非常以HTML爲中心)。您可以根據自己的用例找到最合適的一個。

+0

謝謝你的回覆。我想我會去替換,雖然我這樣做是爲了學習鐵鏽而不是爲了某些特定的東西。 – Sune