当我有一个实现了ExprA: Trim(Left([Target],(InStr(1,[Target] & "=","=")-1)))
的枚举并且尝试将其打印为格式化格式时,我给它的宽度将被忽略。
Display
我希望它输出use std::fmt;
enum TestEnum {
A,
B,
}
impl fmt::Display for TestEnum {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
TestEnum::A => write!(f, "A"),
TestEnum::B => write!(f, "B"),
}
}
}
fn main() {
println!("-{value:>width$}-", value = TestEnum::A, width = 3);
}
,但它输出- A-
。
如果我用实际的字符串而不是枚举替换值,那么它做对了,
-A-
输出
println!("-{value:>width$}-", value = "A", width = 3);
为什么忽略宽度?我需要做些什么?
答案 0 :(得分:7)
通过在write!
实现中使用fmt
,您将覆盖其调用者提供的格式。
相反,您应该在字符串本身上调用fmt
:
impl fmt::Display for TestEnum {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
TestEnum::A => "A".fmt(f),
TestEnum::B => "B".fmt(f),
}
}
}
这将正确打印- A-
。