【问题标题】:How to specify the underlying type of an enum in Rust? [duplicate]如何在 Rust 中指定枚举的底层类型? [复制]
【发布时间】:2017-05-29 15:15:37
【问题描述】:

给定一个带有一些未类型化值的简单枚举,可能希望此枚举的大小使用比默认值更小的整数类型。例如,这提供了将枚举存储在u8 数组中的能力。

enum MyEnum { 
    A = 0,
    B,
    C,
}

可以使用u8 数组并将它们与一些常量进行比较,但我希望使用枚举来确保在匹配语句中处理所有可能性。

如何指定它以使其size_of 匹配所需的整数类型?

【问题讨论】:

  • 注意,已经有一些类似的问题 - 但他们正在询问与其他语言的接口(使我最初尝试查找此信息失败!) - 所以问了一个新问题.
  • 虽然这被标记为重复,但另一个问题是关于 C++ FFI。

标签: enums rust


【解决方案1】:

这可以使用representation (repr) 说明符来完成。

#[repr(u8)]
enum MyEnum { A = 0, B, C, }

超出类型范围的赋值将引发编译器警告。

【讨论】:

    【解决方案2】:

    “我们可能想要them”是什么意思?

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

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

    sn-p 来自https://doc.rust-lang.org/book/enums.html

    【讨论】:

    • 请注意,Rust enum 不需要用作可区分的联合(也称为标记联合),并且可以用作“普通”枚举来枚举许多相关的整数值。这就是此处 OP 提出的具体用例。
    • @MatthieuM。这些值(例如 A 的 0)在类似 C 的用例中是否可变?
    • MyEnum::A 本身是一个常数,但是 MyEnum 的值可以更改。这实际上只是enum 的一个特例,其中没有一个变体具有有效负载,在这种情况下,判别式的值可以(1)指定和(2)查询。
    • 编辑了 “我们可能想要他们” 声明。确实很模糊
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 2010-11-10
    • 2014-08-02
    • 1970-01-01
    • 2020-01-04
    • 2016-04-18
    • 1970-01-01
    相关资源
    最近更新 更多