我想使用format!
宏与String
作为第一个参数,但因为宏需要字符串文字,所以我无法传递任何与它不同的内容。
我想这样做是为了将字符串动态添加到当前字符串中,以便在视图引擎中使用。如果有更好的方法,我愿意接受建议。
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 模板引擎的非详尽列表(排名不分先后):
- 车把 https://github.com/sunng87/handlebars-rust
- Rustache https://github.com/rustache/rustache
- Maud https://github.com/lambda-fairy/maud
- 恐怖表演 https://github.com/Stebalien/horrorshow-rs
- 格式宏 https://github.com/krdln/fomat-macros
- ...
模板引擎具有不同的特征,并且在编译时或运行时发生的验证程度及其灵活性方面显着不同(例如,我似乎记得 Maud 非常以 HTML 为中心)。您可以根据自己的使用情况找到最适合的一种。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)