在枚举中使用预定义的结构



我看到了这个代码:

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

看起来代码的作者在枚举中定义了结构。正确的术语是什么?这是怎么回事?有没有一种方法可以将预定义的结构放入枚举中?

struct Run { distance: i32 }
enum Message {
Run, // already defined so we just write Run instead of Run { distance: i32 }
Quit,
Move { x: i32, y: i32 },
Write(String),
ChangeColor(i32, i32, i32),
}
fn main() {}

我想这将不起作用,那么我应该怎么做呢?

您正在定义的枚举成员及其包含的结构或值是不同的,因此您不能完全执行您想要执行的操作;但你可以接近:

struct Run { distance: i32 }
enum Message {
Run(Run),
Quit,
}
fn main() {
let m = Message::Run(Run { distance: 32 });
}

在这种情况下,您有一个struct Run和一个包含一个恰好是struct Run的值的Message::Run

Enum变体可以将数据存储在rust中。这通常被称为求和类型或算术数据类型。

该数据可以是结构或元组(基本上只是结构的一种简单形式(,其类型为Enum::Variant

在第二个示例中,Message::Run类型与机箱根处的Run类型不同,因此rustc不会使用crate::Run作为Message::Run的类型。为了正确地做到这一点,您可以像第一个例子中那样在行中声明Run,或者使您的变体Run(Run)

最新更新