是否有正确的方法从包中的枚举值创建const?

时间:2017-01-06 08:00:17

标签: rust

创建一个箱子:

cargo new --lib constenum

的src / lib.rs

#[repr(u16)]
pub enum MyEnum {
    ONE = 1,
    TWO = 2,
}
pub const CRATE_ONE: u16        = MyEnum::ONE as u16;
pub const CRATE_TWO: u16        = MyEnum::TWO as u16;

测试/ lib.rs

extern crate constenum;

#[test]
fn f() {
    let test_x = [0; constenum::CRATE_TWO as usize];
    // the above causes a compile error below

    // error[E0080]: constant evaluation error
    //    --> src/lib.rs:7:28
    //    |
    // 10 |
    //    |                              ^^^^^^^^^^^^^ unimplemented constant expression: enum variants
    //    |
    // note: for repeat count here
    //     --> tests/lib.rs:5:22
    //    |
    // 5  |     let test_x = [0; constenum::CRATE_TWO as usize];
    //    |                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}

如果我将相同的代码放入 examples / main.rs 中,这与测试非常相似但不使用crate,则会成功:

#[repr(u16)]
pub enum ExampleEnum {
    ONE = 1,
    TWO = 2,
}
pub const EXAMPLE_ONE: u16      = ExampleEnum::ONE as u16;
pub const EXAMPLE_TWO: u16      = ExampleEnum::TWO as u16;

fn main() {
    let example_x = [0; EXAMPLE_TWO as usize];
}

0 个答案:

没有答案