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

fn main() {
    let string = format!(TEST, "OK");
    println!("{}", string);
}

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

4

1 回答 1

7

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

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

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

fn main() {
    let string = format!(test_fmt_str!(), "OK");
    println!("{}", string);
}

永久链接到操场

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

于 2020-04-24T10:38:13.803 回答