1 个不稳定版本
0.1.0 | 2022年4月6日 |
---|
#11 in #discriminant
9KB
discrimenum
仅在枚举的区分符(discriminant)重要时,派生 Hash
和 PartialEq
为什么?
有时你有一个枚举,其变体可能包含一些数据。然而,在比较或散列时,你并不一定关心这些数据是什么,只关心区分符是否匹配。这可以通过一个超级简单的实现来完成——它实际上只有五行代码。这个 crate 仅为此提供了便利。
用法
默认情况下,discrimenum 的派生会采用相应特质的名字。这意味着你只需要添加以下行即可使一切正常工作
use discrimenum::{Hash, PartialEq};
请注意,这将自动覆盖预导入的现有派生,防止在当前作用域内使用非 discrimenum。
如果这不可取,那么...
请指定名称:
use
重命名它:
use discrimenum::Hash as DHash;
作用域
// ... { use discrimenum::Hash; #[derive(Hash)] enum Foo { // ... } } // ...
然后将其应用于您的枚举
use discrimenum::{Hash, PartialEq};
#[derive(Hash, PartialEq, Debug)]
enum MyEnum {
A(usize),
B(usize)
}
assert_eq!(MyEnum::A(123), MyEnum::A(321));
assert_ne!(MyEnum::A(123), MyEnum::B(123));
泛型
这同样适用于泛型枚举。实际上,由于我们只关心区分符,因此不需要对泛型进行绑定。
use discrimenum::{Hash, PartialEq};
#[derive(Hash, PartialEq)]
enum MyGenericEnum<T> {
A(T),
B(T)
}
// Notice we can put `T` instead of `T: Hash + PartialEq`
与其他类似 crate 的区别?
没有。只是想再添加一个(😉)
依赖
~1.5MB
~35K SLoC