对于普通的枚举类型(举例),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)
慕妹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!("不一样"),}}很繁琐,但是可以写宏。
添加回答
举报
0/150
提交
取消