我想定义一个枚举,其中两个不同的值相等,但是我想这样做而不必显式写出Test :: B == Test :: B,Test :: C == Test的所有匹配情况: :C.
pub enum Test {
A,
B,
C,
AlsoA,
}
Run Code Online (Sandbox Code Playgroud)
也许这样的事情,但不必写出评论标记的部分
impl PartialEq for Test {
fn eq(&self, other: &Test) -> bool {
match (self, other) {
(&Test::A, &Test::AlsoA) | (&Test::AlsoA, &Test::A) => true,
// But without this part -------------------
(&Test::A, &Test::A) => true,
(&Test::B, &Test::B) => true,
(&Test::C, &Test::C) => true,
(&Test::AlsoA, &Test::AlsoA) => true,
// -----------------------------------------
_ => false,
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以添加#[repr(T)]到枚举(其中T是整数类型),然后比较它们的as T值:
#[derive(Copy, Clone)]
#[repr(u8)]
pub enum Test {
A,
B,
C,
AlsoA,
}
impl PartialEq for Test {
fn eq(&self, other: &Test) -> bool {
match (self, other) {
(&Test::A, &Test::AlsoA) |
(&Test::AlsoA, &Test::A) => true,
(x, y) => *x as u8 == *y as u8,
}
}
}
fn main() {
use Test::*;
assert!(A == A);
assert!(B == B);
assert!(C == C);
assert!(AlsoA == AlsoA);
assert!(A == AlsoA);
assert!(AlsoA == A);
}
Run Code Online (Sandbox Code Playgroud)
这也回答了你的第二个问题:只需添加一个#[repr(T)]然后再使用as T.
| 归档时间: |
|
| 查看次数: |
443 次 |
| 最近记录: |