用写!宏用字符串而不是字符串文字

时间:2015-07-26 13:28:03

标签: rust

我已经写了以下功能:

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());
}

它应该取出字符串并以红色在控制台上打印出来。 当我尝试编译时,编译器说:

error: format argument must be a string literal.
 --> src/main.rs:4:16
  |
4 |     (write!(t, text)).unwrap();
  |                ^^^^

经过大量搜索,我发现我能够用例如文本变量替换文本变量。 "text"它会起作用,因为它是一个字符串文字,write!宏需要它。

我怎样才能将write!宏用于字符串而不是字符串文字?或者是否有更好的方法来对终端输出进行着色?

1 个答案:

答案 0 :(得分:7)

只需使用write!(t, "{}", text)

我认为你错过了错误信息的主旨。 write!有两个强制性参数:

  1. 要写信的位置。
  2. 格式字符串。
  3. 第二个参数不仅仅是任意字符串,而是格式字符串。

    另见: