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
。@RPiAwesomenessDebug
是为枚举的一个值实现的;您没有枚举的值。这vals
vector意味着什么?你想输出什么?