【问题标题】:Use write! macro with a string instead of a string literal使用写!带有字符串而不是字符串文字的宏
【发布时间】:2018-04-19 05:34:50
【问题描述】:

我写了以下函数:

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 变量替换为例如"text" 它会起作用,因为它是一个字符串文字,write! 宏需要它。

如何将write! 宏与字符串而不是字符串文字一起使用?或者有没有更好的方法来为终端输出着色?

【问题讨论】:

    标签: rust


    【解决方案1】:

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


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

    1. 要写入的位置。
    2. 格式字符串。

    第二个参数不是任意字符串,它是格式字符串。

    另见:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      • 2017-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-31
      • 1970-01-01
      相关资源
      最近更新 更多