Enums 如何在Rust中指定枚举的基础类型?

Enums 如何在Rust中指定枚举的基础类型?,enums,rust,Enums,Rust,如果一个简单的枚举有几个未类型化的值,那么该枚举的大小最好使用比默认值更小的整数类型。例如,这提供了将枚举存储在u8数组中的能力 enum MyEnum { A = 0, B, C, } 可以使用u8数组并将它们与一些常量进行比较,但我希望使用enum的好处是确保在match语句中处理所有可能性 如何指定它,使其大小\u与所需的整数类型匹配?这可以使用说明符完成 #[repr(u8)] enum MyEnum { A = 0, B, C, } 超出类型范围的赋值将引

如果一个简单的枚举有几个未类型化的值,那么该枚举的大小最好使用比默认值更小的整数类型。例如,这提供了将枚举存储在
u8
数组中的能力

enum MyEnum { 
    A = 0,
    B,
    C,
}
可以使用
u8
数组并将它们与一些常量进行比较,但我希望使用enum的好处是确保在match语句中处理所有可能性


如何指定它,使其
大小\u与所需的整数类型匹配?

这可以使用说明符完成

#[repr(u8)]
enum MyEnum { A = 0, B, C, }
超出类型范围的赋值将引发编译器警告。

您所说的“我们可能需要
它们”
是什么意思

程序中的
A
B
C
是用户定义的值构造函数,而不是OOP中已知的
字段。相反,您可以为如下所示的参数指定类型

enum Message {
    Quit,
    ChangeColor(i32, i32, i32),
    Move { x: i32, y: i32 },
    Write(String),
}

该片段来自。

注意,已经有一些类似的问题-但他们正在询问与其他语言的接口(使我最初尝试查找此信息失败!)-因此提出了一个新问题。虽然这被标记为重复,另一个问题是关于C++ FFI。注意RISUD<代码> EnUM <代码>不必被用作区分的联合(Aka标记的联合),并且可以用作“简单”枚举来枚举多个相关的积分值。这是OP在这里特别介绍的用例。@MatthieuM。在类似C的用例中,这些值(例如A的0)是可变的吗?
MyEnum::A
本身是一个常量,但是A
MyEnum
的值可以更改。这实际上只是
enum
的一个特例,其中所有变量都没有有效负载,在这种情况下,可以(1)指定和(2)查询判别式的值。编辑“We may want them”语句。确实很模糊