#枚举 #数组

enhanced_enum

增强型无字段枚举和相关数组类型

4次发布

0.2.2 2020年10月25日
0.2.1 2020年10月17日
0.2.0 2020年10月16日
0.1.0 2020年10月13日

#枚举中排名第110

Download history 191/week @ 2024-03-11 274/week @ 2024-03-18 662/week @ 2024-03-25 577/week @ 2024-04-01 192/week @ 2024-04-08 257/week @ 2024-04-15 249/week @ 2024-04-22 528/week @ 2024-04-29 294/week @ 2024-05-06 263/week @ 2024-05-13 257/week @ 2024-05-20 190/week @ 2024-05-27 509/week @ 2024-06-03 216/week @ 2024-06-10 206/week @ 2024-06-17 298/week @ 2024-06-24

每月下载量1,230
326crate中使用(直接使用2

MIT/Apache

16KB
203

增强型无字段枚举和相关数组类型

在Rust中,枚举可以包含数据字段,这是一个强大的语言特性。然而,并非所有枚举都有数据字段。无字段枚举只是一个变体列表。这个crate为无字段枚举提供了许多功能,这些功能对于有数据字段的枚举来说很难或不可能提供。

这个crate包含一个单独的项:生成枚举的宏 enhanced_enum!

enhanced_enum::enhanced_enum!(YourEnum { A, B, C });

翻译为

pub enum YourEnum {
A,
B,
C
}

impl YourEnum {
...
}

/// Custom wrapper around an array of length `YourEnum::len()`.
/// This array can only be indexed by `YourEnum`.
pub struct YourEnumArray<T> {
...
}

功能

  • 增强型枚举实现了许多常见特质
  • Debug, Display,
  • Copy, Clone,
  • PartialEq, Eq, PartialOrd, Ord,
  • Hash
  • 使用 YourEnum::iter() 遍历您增强型枚举的所有变体。

  • 使用 YourEnum::count()YourEnum::len() 计算变体的数量。

  • 创建一个只能通过您的枚举进行索引的数组。宏 enhanced_enum! 生成一个标准数组的包装器,并实现与标准数组非常相似的API。新数组的名称是枚举名称加上“Array”。

  • 在整数、字符串和增强型枚举之间进行转换。

  • YourEnum::try_from(usize) 也与 u3264 一起工作。
  • YourEnum::try_from(&str) 注意,字符串必须与变体名称完全匹配,否则此操作返回错误。
  • your_enum作为 usize.
  • your_enum.转换为字符串() ->String
  • your_enum.转换为字符串() -> &'static str
  • 通过pyo3库与Python接口。目前这仅实现了从Python字符串到Rust的转换。这是可选编译的。要启用:使用特征标志“pyo3”构建enhanced_enum crate。

示例

用于计数DNA核苷酸的直方图。此示例重新实现了来自 Trait std::ops::Index 文档的示例。

enhanced_enum::enhanced_enum!(Nucleotide {
A,
C,
G,
T,
});

let nucleotide_count = NucleotideArray::<usize>::new_with(|x| match x {
Nucleotide::A => 14,
Nucleotide::C => 9,
Nucleotide::G => 10,
Nucleotide::T => 12
});
assert_eq!(nucleotide_count[Nucleotide::A], 14);
assert_eq!(nucleotide_count[Nucleotide::C], 9);
assert_eq!(nucleotide_count[Nucleotide::G], 10);
assert_eq!(nucleotide_count[Nucleotide::T], 12);

依赖关系