如何使用格式的动态格式字符串!宏?

时间:2015-09-14 19:31:23

标签: string format rust literals

我刚开始学习Rust,我正在制作一些小工具来帮助我理解语言。我在使用String宏格式化format!时遇到问题。由于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的内容。

2 个答案:

答案 0 :(得分:12)

简短回答:无法完成。

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

您正在寻找的是模板引擎。一个非详尽的Rust模板引擎列表,没有特定的顺序:

模板引擎具有不同的特性,特别是在编译时或运行时发生的验证程度及其灵活性(我似乎记得Maud非常以HTML为中心)。您可以找到最适合您用例的那个。

答案 1 :(得分:3)

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