String 如何将动态格式字符串与格式一起使用!宏?

String 如何将动态格式字符串与格式一起使用!宏?,string,format,rust,literals,String,Format,Rust,Literals,我想使用格式宏,但由于宏需要字符串文字,因此无法传递任何不同的内容 我想这样做是为了动态地将字符串添加到当前字符串中,以便在视图引擎中使用。如果有更好的方法,我愿意接受建议 let test = String::from("Test: {}"); let test2 = String::from("Not working!"); println!(test, test2); 我真正想要实现的是下面的示例,其中main.html包含{content} us

我想使用
格式字符串作为第一个参数的code>宏,但由于宏需要字符串文字,因此无法传递任何不同的内容

我想这样做是为了动态地将字符串添加到当前字符串中,以便在视图引擎中使用。如果有更好的方法,我愿意接受建议

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(())
}
使用std::io::prelude::*;
使用std::fs::File;
使用std::io;
fn main(){
让mut buffer=String::new();
使用\try(&mut buffer)从\u文件中读取\u;
println!(&buffer,content=“content”);
}
fn使用\u try(缓冲区:&mut字符串)->结果从\u文件\u读取\u{
让mut file=try!(file::open(“main.html”);
试试!(file.read_to_string(buffer));
好(())
}

因此,我想在格式化main.html后打印它的内容。

简短回答:这无法完成


长答案:
格式宏(及其衍生物)需要字符串文字,即编译时已知的字符串。作为交换,如果提供的参数与格式不匹配,则会引发编译错误


您正在寻找的是模板引擎。防锈模板引擎的非详尽列表,无特定顺序:


模板引擎具有不同的特性,并且在编译时或运行时发生的验证程度以及它们的灵活性方面存在显著差异(例如,我似乎记得Maud非常以HTML为中心)。这取决于您如何找到最适合您的用例。

查看库,它是我发现的最接近动态字符串格式的库。

可能是@Shepmaster:的副本,而不是副本;反过来说:格式字符串是这个问题中的动态位。谢谢你的回答。我想我会选择替换,因为我这样做是为了学习生锈,而不是为了一些特定的东西。