У меня есть это перечисление:
#[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
для этих вариантов?