2015-07-11 80 views
11

我有一个枚举:如何将枚举引用转换为数字?

enum Foo { 
    Bar = 1, 
} 

如何转换到这个枚举的引用到数学中使用的整数?

fn f(foo: &Foo) { 
    let f = foo as u8; // error[E0606]: casting `&Foo` as `u8` is invalid 
    let f = foo as &u8; // error[E0605]: non-primitive cast: `&Foo` as `&u8` 
    let f = *foo as u8; // error[E0507]: cannot move out of borrowed content 
} 

回答

11

*foo as u8是正确的,但你必须实现Copy,否则你会留下一个无效的参考。

#[derive(Copy, Clone)] 
enum Foo { 
    Bar = 1, 
} 

fn f(foo: &Foo) -> u8 { 
    *foo as u8 
} 

因为你的枚举将是一个非常轻量级的对象,你应该按价值计算为传递也无妨,而您将需要Copy为好。