为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

小唯快跑啊 2019-04-09 20:25:13
对于普通的枚举类型(举例),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)这样的写法。
查看完整描述

2 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

#[deriving(Eq)]
#[deriving(Show)]
enumErrorCode{
EINVAL=1,
EAGAIN=2,
}
assert_eq!(e1,e2);
rustc版本:rustc0.10-pre(33768c42014-03-0702:51:39-0800)
                            
查看完整回答
反对 回复 2019-04-09
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

不用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!("不一样"),
}
}
很繁琐,但是可以写宏。
                            
查看完整回答
反对 回复 2019-04-09
  • 2 回答
  • 0 关注
  • 785 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信