翻译时,消息可以是不同的语言,并具有格式参数。我希望能够在模板可以存储在文件中的情况下执行此操作:
static PATTERN: &'static str = r"Hello {inner};"; /// in some implementation fn any_method(&self) -> String { format!(PATTERN, inner = "world"); }
qoefvg9y1#
这是不可能的。格式字符串必须是实际的文本字符串。下一个最好的方法是某种dynamic string format库,或者,如果你的需求不是太复杂,你可以使用str::replace。
str::replace
k2fxgqgv2#
使用include_str宏(从1.0.0版开始,标准库中就提供了该宏),这绝对是可能的,而且很简单。以下示例是使用rustc 1.58.1进行测试的:
include_str
rustc
src/main.rs
println!(include_str!("src/hello-world.tmpl"), "world");
src/hello-world.tmpl
Hello {inner}
这是因为include_str在println、format和朋友们有机会计算他们的参数之前,将模板文件的内容作为字符串注入。这种方法只有在宏扩展过程中您想要包含的格式模板可用时才有效--就像您的示例中那样。如果它不可用,那么您应该考虑其他选项,比如@DK建议的选项。作为额外的奖励:您也可以将格式字串定义为宏,在原始程式码位置而非使用它们的网站中定义格式字串。
println
format
2条答案
按热度按时间qoefvg9y1#
这是不可能的。格式字符串必须是实际的文本字符串。
下一个最好的方法是某种dynamic string format库,或者,如果你的需求不是太复杂,你可以使用
str::replace
。k2fxgqgv2#
使用
include_str
宏(从1.0.0版开始,标准库中就提供了该宏),这绝对是可能的,而且很简单。以下示例是使用rustc
1.58.1进行测试的:src/main.rs
的内容:src/hello-world.tmpl
的内容这是因为
include_str
在println
、format
和朋友们有机会计算他们的参数之前,将模板文件的内容作为字符串注入。这种方法只有在宏扩展过程中您想要包含的格式模板可用时才有效--就像您的示例中那样。如果它不可用,那么您应该考虑其他选项,比如@DK建议的选项。作为额外的奖励:您也可以将格式字串定义为宏,在原始程式码位置而非使用它们的网站中定义格式字串。