为什么调试打印未按预期格式格式化枚举?

时间:2018-11-07 03:27:20

标签: rust

我需要从枚举中打印值并将其​​格式化。然后,我编写了如下代码:

#[derive(Debug)]
enum MyEnum {
    AB,
}

fn main() {
    let value = MyEnum::AB;
    println!("[{: <3?}]", value);
}

但是,结果是[AB],而我希望结果是[AB ]。为什么?如何在调试打印中添加填充?

1 个答案:

答案 0 :(得分:6)

这不是为Debug导出enum时实现的行为,如您所见:

#[derive(Debug)]
enum MyEnum {
    AB(i32),
}

fn main() {
    let value = MyEnum::AB(42);
    println!("[{:<3?}]", value);
}

输出:

[AB(42 )]

我认为您需要自己实现Debug

enum MyEnum {
    AB,
}

use std::fmt;

impl fmt::Debug for MyEnum {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        match self {
            MyEnum::AB => f.pad("AB"),
        }
    }
}

fn main() {
    let value = MyEnum::AB;
    println!("[{:<3?}]", value);
}

输出:

[AB ]