【问题标题】:Why debug print does not formatted an enum as expected?为什么调试打印没有按预期格式化枚举?
【发布时间】:2018-11-07 03:27:19
【问题描述】:

我需要从枚举中打印一个调试值并对其进行格式化。然后,我这样写了这段代码:

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

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

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

【问题讨论】:

标签: rust


【解决方案1】:

这不是在为 enum 派生 Debug 时实现的行为,如您所见:

#[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 ]

【讨论】:

  • 就我而言,我自己实施Debug 不好,因为我在枚举中有很多案例,我会寻找另一种解决方案。谢谢你的回答。
  • 我刚刚在 rust-lang 开了一个问题:github.com/rust-lang/rust/issues/55749
  • @Macabeus 最简单的解决方法是使用println!("[{:&lt;3}]", format!("{:?}", value))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 2012-06-26
  • 2015-10-14
  • 1970-01-01
  • 2014-12-27
  • 1970-01-01
  • 2015-03-17
相关资源
最近更新 更多