2015-07-11 14 views
11

Ho un enum:Come si converte un riferimento enum in un numero?

enum Foo { 
    Bar = 1, 
} 

Come posso convertire un riferimento alla presente enum in un intero per essere utilizzato in matematica?

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 
} 

risposta

11

*foo as u8 è corretto, ma è necessario implementare Copy perché altrimenti si dovrebbe lasciare alle spalle un riferimento non valido.

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

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

Dal momento che l'enum sarà un oggetto molto leggero si dovrebbe passare in giro per valore in ogni caso, per il quale si avrebbe bisogno Copy pure.

Problemi correlati