Stati c Enum в Rust - PullRequest
       84

Stati c Enum в Rust

2 голосов
/ 18 июня 2020

Можно ли определить перечисление, не беспокоясь о распределении памяти в Rust?

Предположим, следующее определение моего перечисления.

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

Я хотел бы знать, является ли оно можно ссылаться на один и тот же экземпляр, скажем, Orientation::North в коде.

Создает ли следующий код два отдельных экземпляра North?

let o1 = Orientation::North;
let o2 = Orientation::North;

Я знаю, что могу добиться этого путем определения переменных stati c, как показано ниже. Есть ли лучший (синтаксически более безопасный / простой / более чистый) способ сделать то же самое?

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;

1 Ответ

7 голосов
/ 18 июня 2020

Код, о котором вы спрашиваете, во время выполнения идентичен тому, как если бы вы написали:

let o1: u8 = 0;
let o2: u8 = 0;

Перечисления дают вам абстракцию о том, что на самом деле происходит, поэтому вы получаете эффективность и синтаксис в то же время, наряду с проверкой типов и ошибками, когда вы забываете вариант в совпадении. вы уже могли бы это сделать.

Есть ли лучший (синтаксически более безопасный / простой / более чистый) способ сделать то же самое?

«Лучший» способ использовать enum - самый простой из возможных способов:

let o1 = Orientation::North;
let o2 = Orientation::North;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...