rust 如何在源代码之外存储格式字符串模板?

lymgl2op  于 2022-12-04  发布在  其他
关注(0)|答案(2)|浏览(172)

翻译时,消息可以是不同的语言,并具有格式参数。我希望能够在模板可以存储在文件中的情况下执行此操作:

static PATTERN: &'static str = r"Hello {inner};";

/// in some implementation

fn any_method(&self) -> String {
    format!(PATTERN, inner = "world");
}
qoefvg9y

qoefvg9y1#

这是不可能的。格式字符串必须是实际的文本字符串。
下一个最好的方法是某种dynamic string format库,或者,如果你的需求不是太复杂,你可以使用str::replace

k2fxgqgv

k2fxgqgv2#

使用include_str宏(从1.0.0版开始,标准库中就提供了该宏),这绝对是可能的,而且很简单。以下示例是使用rustc 1.58.1进行测试的:

  • src/main.rs的内容:
println!(include_str!("src/hello-world.tmpl"), "world");
  • src/hello-world.tmpl的内容
Hello {inner}

这是因为include_strprintlnformat和朋友们有机会计算他们的参数之前,将模板文件的内容作为字符串注入。这种方法只有在宏扩展过程中您想要包含的格式模板可用时才有效--就像您的示例中那样。如果它不可用,那么您应该考虑其他选项,比如@DK建议的选项。
作为额外的奖励:您也可以将格式字串定义为宏,在原始程式码位置而非使用它们的网站中定义格式字串。

相关问题