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
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)
也与u32
和64
一起工作。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);