【发布时间】:2022-02-03 23:46:07
【问题描述】:
这就是我想要做的:
format!(match x { 0 => "Hello, {}", 1 => "Bye, {}" }, name);
它无法编译。解决办法是什么?
【问题讨论】:
-
解决方案是让格式内部匹配,而不是相反。格式字符串必须是文字。
标签: rust
这就是我想要做的:
format!(match x { 0 => "Hello, {}", 1 => "Bye, {}" }, name);
它无法编译。解决办法是什么?
【问题讨论】:
标签: rust
format! 宏需要一个固定字符串literal 作为第一个参数(格式字符串)。宏在编译过程中被翻译成“正常”代码,因此必须在那个阶段解析和分析格式字符串,而不是在运行时。这就是为什么不能将运行时表达式作为格式字符串的原因。
你可以这样做:
let s = match x {
0 => format!("Hello, {x}"),
1 => format!("Bye, {x}"),
_ => panic!("Unexpected value: {x}"),
};
【讨论】:
let greeting = match x {
0 => format!("Hello, {}", name),
1 => format!("Bye, {}", name),
_ => panic!(),
};
【讨论】: