猿问

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

对于普通的枚举类型(举例),
enumErrorCode{
EINVAL=1,
EAGAIN=2,
}
lete1=EINVAL;
lete2=EAGAIN;
这样的判断是非法的:
assert_eq!(e1,e2);
如果不实现traitEq的话,
implEqforErrorCode{
fneq(&self,other:&ErrorCode)->bool{
*selfasint==*otherasint
}
}
也除了e1asint==e2asint的话,是否有别的典型的办法可以比较e1和e2是否为同一值?
总觉得这两个办法都有点别扭。另外,即使实现了Eq,貌似assert_eq!(e1,e2)也会报错,只能用assert!(e1==e2)这样的写法。
Cats萌萌
浏览 1444回答 2
2回答

慕尼黑的夜晚无繁华

#[deriving(Eq)]#[deriving(Show)]enumErrorCode{EINVAL=1,EAGAIN=2,}assert_eq!(e1,e2);rustc版本:rustc0.10-pre(33768c42014-03-0702:51:39-0800)

慕侠2389804

不用eq的话只能模式匹配了:enumFoobar{Foo,Bar,}fnmain(){leta=Foobar::Foo;letb=Foobar::Bar;match(a,b){(Foobar::Foo,Foobar::Foo)|(Foobar::Bar,Foobar::Bar)=>println!("一样"),(Foobar::Foo,Foobar::Bar)|(Foobar::Bar,Foobar::Foo)=>println!("不一样"),}}很繁琐,但是可以写宏。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答