Как преобразовать ссылку перечисления в число
Допустим, у меня есть перечисление:
enum Foo {
Bar = 1
}
Как преобразовать ссылку на это перечисление в целое число, которое будет использоваться в математике?:
fun f(foo: &Foo) -> u8 {
let f = foo as u8; // error: non-scalar cast: `&Foo` as `u8`
let f = foo as &u8; // error: non-scalar cast: `&Foo` as `&u8`
let f = *foo as u8; // error: cannot move out of borrowed content
}
Ответы
Ответ 1
*foo as u8
верен, но проблема в том, что вы должны выполнить Копирование, потому что иначе вы оставите недопустимую ссылку.
#[derive(Copy, Clone)]
enum Foo {
Bar = 1,
}
fn f(foo: &Foo) -> u8 {
*foo as u8
}
Поскольку ваш enum будет очень легким объектом, вы все равно должны передавать его по значению, для которого вам понадобится Копировать.