有没有一种简单的方法来格式化和打印枚举值?我希望它们有一个std::fmt::Display
的默认实现,但似乎不是这样。
enum Suit {
Heart,
Diamond,
Spade,
Club
}
fn main() {
let s: Suit = Suit::Heart;
println!("{}", s);
}
预期输出:Heart
错误:
error[E0277]: the trait bound `Suit: std::fmt::Display` is not satisfied
--> src/main.rs:10:20
|
10 | println!("{}", s);
| ^ the trait `std::fmt::Display` is not implemented for `Suit`
|
= note: `Suit` cannot be formatted with the default formatter; try using `:?` instead if you are using a format string
= note: required by `std::fmt::Display::fmt`
4条答案
按热度按时间zdwk9cvp1#
您可以派生
std::format::Debug
的实现:无法派生
Display
,因为Display
的目的是向人类显示,编译器无法自动决定适合这种情况的样式。Debug
是为程序员设计的,因此可以自动生成内部公开视图。dgsult0t2#
Debug
trait输出Enum
变体的名称。如果您需要格式化输出,可以为
Enum
实现Display
,如下所示:368yc8dk3#
如果你想为枚举变量自动生成
Display
实现,你可能需要使用strum crate:qyuhtwio4#
结合DK.和Matilda Smeds的答案,得到一个稍微简洁的版本: