Rust 某些枚举变量未实现调试特性

Rust 某些枚举变量未实现调试特性,rust,Rust,我有这个枚举: #[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派生,我

我有这个枚举:

#[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
派生,我得到了以下编译器错误:

错误[E0277]:`fn(std::string::string)->TokenType{TokenType::Ident}`未实现`std::fmt::Debug`
-->src/main.rs:10:38
|
10 | println!(“预期为{:?}”中的一个,VAL);
|^^^`fn(std::string::string)->TokenType{TokenType::Ident}`不能使用`{:?}`进行格式化,因为它没有实现`std::fmt::Debug'`
|
=help:trait`std::fmt::Debug`未为`fn(std::string::string)->TokenType{TokenType::Ident}实现`
=注意:由于对`(fn(std::string::string)->TokenType{TokenType::Ident},&str)的`std::fmt::Debug`的impl有要求,因此需要此项`
=注意:由于对`std::vec::vec-TokenType{TokenType::Ident},&str)`std::fmt::Debug`的impl有要求,因此需要此选项>`
=注意:std::fmt::Debug::fmt需要`
在我看来,这个问题是因为我有一些包含
字符串的枚举变体(例如
Ident(String)
),它没有正确地派生
调试特性,但我不知道如何解决它


是否有某种方法可以强制Rust派生该枚举的特征,或者是否有一种方法可以通过手动为这些变量实现
fmt::Debug
来解决此错误?

TokenType::Ident
不是枚举变量;它是一个枚举变量构造函数。错误消息指出它是一个函数:

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

函数不实现
调试
。您想要什么,没有解决方案。

有趣的是,我不知道这些被认为是函数,但我想这是有道理的。因此,即使手动,也无法在这样的枚举上实现
Debug
。@RPiAwesomeness
Debug
是为枚举的一个值实现的;您没有枚举的值。这
vals
vector意味着什么?你想输出什么?