Почему отладочная печать не отформатировала перечисление как ожидалось? - PullRequest
0 голосов
/ 07 ноября 2018

Мне нужно распечатать как отладочное значение из enum и отформатировать его. Затем я написал этот код так:

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

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

Но результат равен [AB], в то время как я ожидал, что результат будет [AB ]. Зачем? Как добавить отступы в отладочную версию?

1 Ответ

0 голосов
/ 07 ноября 2018

Это поведение не реализовано при получении 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 ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...