Отладочная черта не реализована для некоторых вариантов enum - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть это перечисление:

#[derive(Debug)]
pub enum TokenType {
    Illegal,
    Integer(String),
    Ident(String),
}

fn main() {
    let vals = vec![(TokenType::Ident, "identifier")];
    println!("Expected one of {:?}", vals);
}

Детская площадка

Когда я пытаюсь использовать значение TokenType, кажется, что оно игнорирует Debugдеривации, и я получаю следующую ошибку компилятора:

error[E0277]: `fn(std::string::String) -> TokenType {TokenType::Ident}` doesn't implement `std::fmt::Debug`
  --> src/main.rs:10:38
   |
10 |     println!("Expected one of {:?}", vals);
   |                                      ^^^^ `fn(std::string::String) -> TokenType {TokenType::Ident}` cannot be formatted using `{:?}` because it doesn't implement `std::fmt::Debug`
   |
   = help: the trait `std::fmt::Debug` is not implemented for `fn(std::string::String) -> TokenType {TokenType::Ident}`
   = note: required because of the requirements on the impl of `std::fmt::Debug` for `(fn(std::string::String) -> TokenType {TokenType::Ident}, &str)`
   = note: required because of the requirements on the impl of `std::fmt::Debug` for `std::vec::Vec<(fn(std::string::String) -> TokenType {TokenType::Ident}, &str)>`
   = note: required by `std::fmt::Debug::fmt`

Мне кажется, что проблема в том, что у меня есть несколько вариантов этого перечисления, которые содержат String (например, Ident(String))это не правильно выводит черту Debug, но я не знаю, как ее разрешить.

Есть ли способ заставить Rust получить черту для этого перечисления или есть способ, который я могу решитьэту ошибку, вручную внедрив fmt::Debug для этих вариантов?

1 Ответ

0 голосов
/ 26 декабря 2018

TokenType::Ident - это , а не вариант enum;это перечислимый вариант конструктор .Сообщение об ошибке указывает на то, что это функция:

fn(std::string::String) -> TokenType {TokenType::Ident}

Функции не реализуют Debug.Нет решения для того, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...