Rust中文翻译33

来源:互联网 发布:中经网产业数据库 编辑:程序博客网 时间:2024/05/29 03:43
5.13 枚举

Rust中的枚举是一个可以代表一个或多个可能值的类型:
enum Message {
     Quit,
     ChangeColor(i32, i32, i32),
     Move { x: i32, y: i32 },
     Write(String),
}

每一个变量都可以成为这些值的其中一个.定义一个枚举的语法复用了定义一个结构体的语法,你可以顶一个一个没有数据的变量(就像一个单元结构体),有名子的变量,和无名变量(就像一个元组).和结构体中分开的定义不同,一个枚举就是一个类型.一个枚举的值可以是任意一个变量.因此,一个枚举有时被称为"集合类型":枚举的所有可能值放在一个可能值的集合中.

我们使用::语法来使用每一个变量的名字: 他们由枚举自己的名字确定作用域. 这就允许下述情况发生:

let x: Message = Message::Move { x: 3, y: 4};
enum BoardGameTurn {
     Move { squares: i32 },
     Pass,
}

let y: BoardGameTurn = BoardGameTurn::Move { squares: 1};

两个变量都叫做Move,但是因为他们存在于枚举名字的作用域中,所以他们不会引起冲突.

一个枚举类型的包含了这个变量是什么的信息,作为任何附加在变量上的数据的信息.这通常被称为"标签联合"(tagged union),因为一个包含标签的数据可以说明他是什么类型.编译器使用这些信息来确保你正在安全的使用枚举.例如,你不能析构一个枚举值:

fn process_color_change(msg: Message) {
    let Message::ChangeColor(r, g, b) = msg;
}

不支持这种操作看起来会很受限制,但是这种限制我们可以克服.有两种方法:我们自己实现相等性,或者使用match模式,下一节会讲到.我们不知道Rust如何实现相等性,但是我们可以在traits一节找到原因.
0 0
原创粉丝点击