代码之家  ›  专栏  ›  技术社区  ›  macabeus

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

  •  3
  • macabeus  · 技术社区  · 7 年前

    我需要打印为调试值从枚举和格式。然后,我写了这样的代码:

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

    但是,结果是 [AB] 而我预期的结果是 [AB ]

    1 回复  |  直到 7 年前
        1
  •  6
  •   Stargateur    7 年前

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

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

    [AB(42 )]
    

    调试 你自己:

    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 ]
    
    推荐文章