对于普通的枚举类型(举例),
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)
这样的写法。
#[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)
不用 eq 的话只能模式匹配了:
enum Foobar {
Foo,
Bar,
}
fn main() {
let a = Foobar::Foo;
let b = Foobar::Bar;
match (a, b) {
(Foobar::Foo, Foobar::Foo) | (Foobar::Bar, Foobar::Bar) => println!("一样"),
(Foobar::Foo, Foobar::Bar) | (Foobar::Bar, Foobar::Foo) => println!("不一样"),
}
}
很繁琐,但是可以写宏。