如何格式化这样的字符串?

Fio*_*ono 2 rust rustfmt

static TEST: &str = "test: {}";

fn main() {
    let string = format!(TEST, "OK");
    println!("{}", string);
}
Run Code Online (Sandbox Code Playgroud)

我想构造字符串“test: OK”,但这不起作用。我该怎么做?

mca*_*ton 7

format!宏需要知道在编译时的实际格式字符串。这不包括使用变量和statics,还包括consts(在编译时知道,但在比宏扩展更晚的编译阶段)。

但是,在这种特定情况下,您可以通过使用另一个宏模拟变量来解决您的问题:

macro_rules! test_fmt_str {
    () => {
        "test: {}"
    }
}

fn main() {
    let string = format!(test_fmt_str!(), "OK");
    println!("{}", string);
}
Run Code Online (Sandbox Code Playgroud)

固定链接到操场

如果您的格式字符串在编译时实际上并不知道并且不能在这样的宏中使用,那么您需要使用动态模板引擎