Rust基础07-枚举
枚举
枚举允许我们列举所有可能的值来定义一个类型
-
定义枚举:
enum IpAddrKind { V4, V6, }
-
枚举值:
enum IpAddrKind { V4, V6, } fn main() { let four = IpAddrKind::V4; let six = IpAddrKind::V6; route(four); route(six); route(IpAddrKind::V6); } fn route(ip_kind: IpAddrKind) {}
-
将数据附加到枚举的变体中:
enum IpAddr { V4(String), V6(String), }
使用这种方法,不需要额外使用 struct,每个变体可以拥有不同的类型以及关联的数据量
enum IpAddr { V4(u8, u8, u8, u8), V6(String), }
我们还可以在变体中嵌入结构体类型和其他的各种类型
enum Message { Quit, Move { x: i32, y: i32}, Write(String), ChangeColor(i32, i32, i32), }
-
为枚举定义方法:
使用 impl 关键字
impl Message { fn call(&self) {} }
-
Option 枚举:
定义于标准库中,在Prelude(预导入模块)中,描述了某个值可能存在(某种类型)或不存在的情况
Rust 中类似 Null 概念的枚举:
//Option
enum Option { Some(T), None, } 其包含在Prelude(预导入模块)中,可直接使用
其相比于 Null 的好处:
Option
和 T 是不同的类型,不可以把 Option 直接当成T,若想使用 Option 中的 T,必须将它转换为 T
在 Rust 中没有 Null,在其它语言中,Null 是一个值,表示“没有值”,是因某种原因而变为无效或缺失的值;一个变量可以处于两种状态:空值(null)、非空。
Null 的问题在于:当你尝试像使用非 Null 值那样使用 Null 值的时候,就会引起某种错误。