Rust 怎么经典地比较两个枚举值是否相同?


对于普通的枚举类型(举例),


 enum ErrorCode {
    EINVAL = 1,
    EAGAIN = 2,
}

let e1 = EINVAL;
let e2 = EAGAIN;

这样的判断是非法的:


 assert_eq!(e1, e2);

如果不实现 trait Eq 的话,


 impl Eq for ErrorCode {
    fn eq(&self, other :&ErrorCode) -> bool {
        *self as int == *other as int
    }
}

也除了 e1 as int == e2 as int 的话, 是否有别的典型的办法可以比较 e1 e2 是否为同一值?

总觉得这两个办法都有点别扭。另外,即使实现了 Eq ,貌似 assert_eq!(e1, e2) 也会报错,只能用 assert!(e1 == e2) 这样的写法。

rust

始音カイコ 11 years, 4 months ago

 #[deriving(Eq)]
#[deriving(Show)]
enum ErrorCode {
    EINVAL = 1,
    EAGAIN = 2,
}

assert_eq!(e1, e2);

rustc版本:rustc 0.10-pre (33768c4 2014-03-07 02:51:39 -0800)

wann. answered 11 years, 4 months ago

Your Answer