为什么我的自定义格式化程序实现忽略了宽度?

时间:2019-06-30 16:38:04

标签: rust formatting

当我有一个实现了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);

为什么忽略宽度?我需要做些什么?

1 个答案:

答案 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),
        }
    }
}

Permalink to the playground

这将正确打印- A-