我写了以下函数:
fn print_error(text: &str) {
let mut t = term::stdout().unwrap();
t.fg(term::color::RED).unwrap();
(write!(t, text)).unwrap();
assert!(t.reset().unwrap());
}
Run Code Online (Sandbox Code Playgroud)
它应该取出字符串并以红色在控制台上打印出来.当我尝试编译时,编译器说:
error: format argument must be a string literal.
--> src/main.rs:4:16
|
4 | (write!(t, text)).unwrap();
| ^^^^
Run Code Online (Sandbox Code Playgroud)
经过大量的搜索,我发现我能够用eg替换text变量,"text"它会起作用,因为它是一个字符串文字,write!宏需要它.
我如何使用write!字符串而不是字符串文字?或者是否有更好的方法来对终端输出进行着色?
只是用write!(t, "{}", text).
我想你错过了错误信息的主旨.write!有两个强制性参数:
第二个参数不仅仅是任意字符串,而是格式字符串.
也可以看看: