Подтвердить что ты не робот

Как преобразовать ссылку перечисления в число

Допустим, у меня есть перечисление:

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
}
4b9b3361

Ответ 1

*foo as u8 верен, но проблема в том, что вы должны выполнить Копирование, потому что иначе вы оставите недопустимую ссылку.

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

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

Поскольку ваш enum будет очень легким объектом, вы все равно должны передавать его по значению, для которого вам понадобится Копировать.