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

问题描述 投票:1回答:1
static TEST: &str = "test: {}";

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

我想构造一个字符串 "test: "OK",但这是行不通的。我怎么才能做到这一点呢?

rust rustfmt
1个回答
6
投票

这个 format! 宏需要在编译时知道实际的格式字符串。这就排除了使用变量和 statics,但也 consts (这些变量在编译时就已经知道了,但在编译阶段比宏扩展更晚)。

然而在这种特殊情况下,你可以通过用另一个宏模拟一个变量来解决你的问题。

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

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

(Permalink to the playground)

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

© www.soinside.com 2019 - 2024. All rights reserved.