我怎样才能使用带有格式的动态格式字符串!宏观?
How can I use a dynamic format string with the format! macro?
我想使用带有 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的内容
简短回答:无法完成。
长答案:format!
宏(及其派生词)需要一个字符串文字,即编译时已知的字符串。作为此要求的交换,如果提供的参数与格式不匹配,则会引发编译错误。
您正在寻找的是模板引擎。不分先后顺序的 Rust 模板引擎的非详尽列表:
模板引擎具有不同的特性,并且在编译时或 运行- 时发生的验证程度及其灵活性方面存在显着差异(我似乎记得 Maud 非常 HTML-中心,例如)。您可以找到最适合您的用例的那个。
查看 strfmt 库,这是我发现的最接近动态字符串格式化的库。
我想使用带有 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的内容
简短回答:无法完成。
长答案:format!
宏(及其派生词)需要一个字符串文字,即编译时已知的字符串。作为此要求的交换,如果提供的参数与格式不匹配,则会引发编译错误。
您正在寻找的是模板引擎。不分先后顺序的 Rust 模板引擎的非详尽列表:
模板引擎具有不同的特性,并且在编译时或 运行- 时发生的验证程度及其灵活性方面存在显着差异(我似乎记得 Maud 非常 HTML-中心,例如)。您可以找到最适合您的用例的那个。
查看 strfmt 库,这是我发现的最接近动态字符串格式化的库。