创建一个箱子:
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];
}