枚举值
可以使用枚举并将数据直接放进每一个枚举成员。每个成员可以处理不同类型和数量的数据。
enum IpAddr {V4(u8, u8, u8, u8),V6(String),}let home = IpAddr::V4(String::from("127.0.0.1"));let loopback = IpAddr::V6(String::from("::1"));
可以将任意类型的数据放入枚举成员中,例如字符串、数据类型或者结构体。甚至可以包含另一个枚举
struct Ipv4Addr {// --snip--}struct Ipv6Addr {// --snip--}enum IpAddr {V4(Ipv4Addr),V6(Ipv6Addr),}
可以使用impl来为结构体定义方法那样,在枚举上定义方法。方法体中使用self来获取调用方法的值。
enum Message {Quit,Move { x: i32, y: i32 },Write(String),ChangeColor(i32, i32, i32),}impl Message {fn call(&self) {// 在这里定义方法体}}let m = Message::Write(String::from("hello"));m.call();
Option枚举和其相对于空值的优势
Option 类型应用广泛因为它编码了一个非常普遍的场景,即一个值要么有值要么没值。意味着编译器需要检查是否处理了所有应该处理的情况。
enum Option<T> {Some(T),None,}
1、可以不使用Option::前缀来直接使用Some和None。
2、当使用None而不是Some时,需要告诉 Rust Option
3、空值是一个因为某种原因目前无效或者缺失的值。
4、Option
