Rust 中的静态枚举

Jam*_*ker 2 enums static rust

是否可以定义枚举而不用担心 Rust 中的内存分配?

假设以下是我的枚举的定义。

pub enum Orientation {
    North,
    South,
    East,
    West,
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以Orientation::North在代码中引用相同的 say 实例。

以下代码是否生成了两个单独的实例North

let o1 = Orientation::North;
let o2 = Orientation::North;
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过定义如下静态变量来实现它。有没有更好的(语法上更安全/更简单/更干净)的方法来做同样的事情?

pub enum Orientation {
    North,
    South,
    East,
    West,
}

static NORTH: Orientation = Orientation::North;
static SOUTH: Orientation = Orientation::South;
static WEST: Orientation = Orientation::West;
static EAST: Orientation = Orientation::East;
Run Code Online (Sandbox Code Playgroud)

Pet*_*all 7

您所询问的代码在运行时与您编写的代码相同:

let o1: u8 = 0;
let o2: u8 = 0;
Run Code Online (Sandbox Code Playgroud)

枚举为您提供了对实际发生的事情的抽象,因此您可以同时获得效率和语法便利,以及在您忘记匹配中的变体时进行类型检查和错误。

创建静态“常量”不会有任何效果,因为传递字节是您已经可以做的最快的事情。

有没有更好的(语法上更安全/更简单/更干净)的方法来做同样的事情?

使用枚举的“最佳”方式是最简单的方式:

let o1 = Orientation::North;
let o2 = Orientation::North;
Run Code Online (Sandbox Code Playgroud)

  • @JamesParker不是真的,只是当存在关联数据时,枚举会增长到足以包含关联数据*和*判别式,否则您只有判别式(通常是 u8 ,除非您使用自定义 repr ) 。基本上,“基本情况”就好像关联数据是单位(空元组“()”),其大小为零,因此每个变体所需的唯一空间是判别式。 (2认同)