snippetrustCritical
How do I convert an enum reference to a number?
Viewed 0 times
enumhowconvertnumberreference
Problem
I have an enum:
How do I convert a reference to this enum into an integer to be used in math?
enum Foo {
Bar = 1,
}How do I convert a reference to this enum into an integer to be used in math?
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
}Solution
*foo as u8 is correct, but you have to implement Copy because otherwise you would leave behind an invalid reference.#[derive(Copy, Clone)]
enum Foo {
Bar = 1,
}
fn f(foo: &Foo) -> u8 {
*foo as u8
}Since your enum will be a very lightweight object you should pass it around by value anyway, for which you would need
Copy as well.Code Snippets
#[derive(Copy, Clone)]
enum Foo {
Bar = 1,
}
fn f(foo: &Foo) -> u8 {
*foo as u8
}Context
Stack Overflow Q#31358826, score: 102
Revisions (0)
No revisions yet.