【问题标题】:How do I convert an enum reference to a number?如何将枚举引用转换为数字?
【发布时间】:2015-07-11 15:38:08
【问题描述】:

我有一个枚举:

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
}

【问题讨论】:

    标签: rust


    【解决方案1】:

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

    #[derive(Copy, Clone)]
    enum Foo {
        Bar = 1,
    }
    
    fn f(foo: &Foo) -> u8 {
        *foo as u8
    }
    

    由于您的枚举将是一个非常轻量级的对象,因此无论如何您都应该按值传递它,为此您还需要 Copy

    【讨论】:

    • 对此进行扩展,没有Copy*foo 被解释为将指向值移出传递给f 的共享引用。
    猜你喜欢
    • 1970-01-01
    • 2021-06-12
    • 2019-03-04
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2016-07-30
    相关资源
    最近更新 更多