enums - 有没有办法打印枚举值?

标签 enums rust

是否有一种简单的方法来格式化和打印枚举值?我预计他们会有 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`

最佳答案

您可以派生 std::format::Debug 的实现:

#[derive(Debug)]
enum Suit {
    Heart,
    Diamond,
    Spade,
    Club
}

fn main() {
    let s = Suit::Heart;
    println!("{:?}", s);
}

不可能派生 Display,因为 Display 旨在向人类显示,而编译器无法自动确定适合该情况的样式。 Debug 是为程序员准备的,因此可以自动生成内部公开 View 。

关于enums - 有没有办法打印枚举值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28024373/

相关文章:

python - 如何扩展 Enum 派生类的 Python 类属性

java - 在不修改 Enum 类的情况下构造 Enum 中的实例

rust - 为什么在放置的 Box 上使用 ptr::read() 不是未定义的行为?

c++ - 方便地为枚举定义按位运算符以创建位标志

python - 将字符串列表转换为 `IntFlag`

rust - 如何将字符串列表缩写为最短、明确的形式

rust - 如何从Rust语言的函数返回闭包? [复制]

rust - 有什么方法可以创建 const &'static CStr 吗?

rust - 使用 `serde_yaml` 反序列化多个文档

java - 从其参数获取 ENUM 类型